Где я могу поместить свой XML beans в приложение загрузки Spring?

Я возвращаюсь в Spring (в настоящее время v4). Теперь все замечательно с @SpringBootApplication и другими аннотациями, но вся документация, похоже, забывает упомянуть, как я определяю другие beans в XML!

Например, я хотел бы создать "SFTP-сессию Factory", как определено в:  http://docs.spring.io/spring-integration/reference/html/sftp.html

Есть хороший бит XML для определения bean, но где я его помещаю и как его связать? Раньше я делал:

ApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:applicationContext.xml");

чтобы указать имя и местоположение файла, но теперь я пытаюсь использовать:

ApplicationContext ctx = SpringApplication.run(Application.class);

Где я могу поместить файл XML? Есть ли волшебное имя Spring для его вызова?

Ответы

Ответ 1

Пока вы начинаете с базового класса @Configuration, который может показаться вам похожим на @SpringBootApplication, вы можете использовать @ImportResource, чтобы включить файл конфигурации XML.

@SpringBootApplication
@ImportResource("classpath:spring-sftp-config.xml")
public class SpringConfiguration {
  //
}

Ответ 2

Вы также можете перевести конфигурацию XML в конфигурацию Java. В вашем случае это будет выглядеть так:

@Bean
public DefaultSftpSessionFactory sftpSessionFactory() {
    DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory();
    factory.setHost("localhost");
    factory.setPrivateKey(new ClassPathResource("classpath:META-INF/keys/sftpTest"));
    factory.setPrivateKeyPassphrase("springIntegration");
    factory.setPort(22);
    factory.setUser("kermit");
    return factory;
}

Вы можете поместить этот метод в класс с аннотацией @SpringBootApplication.

Ответ 3

Идея весенней загрузки - избегать XML файла. но если вы хотите сохранить XML-компонент, вы можете просто добавить @ImportResource("classPath:beanFileName.xml").

Я бы порекомендовал удалить файл spring-sftp-config.xml. И, преобразовать этот файл в bean-компонент на основе аннотации весны. Итак, какой бы класс ни был создан как боб. Просто напишите аннотацию @Service или @Component перед именем класса. например:

На основе XML:

<bean ID="id name" class="com.example.Employee">

Аннотация:

@Service or @Component
class Employee{
}

И добавьте @ComponentScan("Give the package name"). Это лучший подход.