Где я могу поместить свой 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")
. Это лучший подход.