我应该将我的 XML bean 放在 Spring Boot 应用程序中的啥位置?
Posted
技术标签:
【中文标题】我应该将我的 XML bean 放在 Spring Boot 应用程序中的啥位置?【英文标题】:Where do I put my XML beans in a Spring Boot application?我应该将我的 XML bean 放在 Spring Boot 应用程序中的什么位置? 【发布时间】:2015-10-19 01:58:48 【问题描述】:我正在重返 Spring(当前为 v4)。现在有了@SpringBootApplication
和其他注释,一切都很棒,但所有文档似乎都忘记提及我如何在 XML 中定义其他 bean!
例如,我想创建一个“SFTP 会话工厂”,定义如下: 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 文件放在哪里?有没有神奇的春天名字可以称呼它?
【问题讨论】:
【参考方案1】:只要您从一个基本的@Configuration
类开始,这听起来像是@SpringBootApplication
,您也可以使用@ImportResource
注释来包含一个XML 配置文件。
@SpringBootApplication
@ImportResource("classpath:spring-sftp-config.xml")
public class SpringConfiguration
//
【讨论】:
我是否必须将 @ImportResource 放在我编写的每个 Spring 应用程序和测试用例之上,或者是否有 Spring 自动查找的默认名称/位置? @DavidNewcomb 您只需要确保可以从您的配置根目录访问带有注释的配置类。如果它是你一直使用的东西,你甚至可以为它添加你自己的自动配置类。 @DavidNewcomb 你传统上只需要一个@SpringBootApplication
在你的应用程序中,因为它本身就是@Configuration
和其他一些必备项的组合。你的 @ImportResource
只需要在一个由 Spring 扫描的 @Configuration
类上,就像在 XML 领域发生/发生的自动扫描一样。
你拯救了我的一天。
我读到Spring Boot
非常擅长的一件事是使“配置”过程变得简单,并且可以在不涉及配置的情况下使用xml
,但xml
可以加入通过应用@bvulaj 提到的配置过程。是否可以在不使用任何xml
的情况下完全配置我的应用程序?【参考方案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】:Spring boot 的理想概念是避免使用 xml 文件。但是如果你想保留xml bean,你可以添加@ImportResource("classPath:beanFileName.xml")
。
我建议删除spring-sftp-config.xml
文件。并且,将此文件转换为基于 spring 注释的 bean。所以,任何类都被创建为 bean。只需在类名前写@Service
或@Component
注释即可。例如:
基于 XML:
<bean ID="id name" class="com.example.Employee">
注释:
@Service or @Component
class Employee
然后,添加@ComponentScan("Give the package name")
。这是最好的方法。
【讨论】:
问题是“如何链接现有的 xml 文件?”而不是“如何将我所有的 bean 转换为注释?”。你的答案和 bvulaj 的一样。 如果您支持注释与 xml,请添加这是一个 ~comment~。顺便说一句,并不是每个人都同意你的看法。 literatejava.com/spring/… #justSayin #notHatin 不。避免使用 XML 并不理想。我在 XML 上下文文件中的字符串 bean 中有 SQL、SAS 脚本、HTML 块,利用上下文变量替换功能。 添加@ImportResource("classpath:beanFileName.xml"),而不是@ImportResource("classPath:beanFileName.xml")以上是关于我应该将我的 XML bean 放在 Spring Boot 应用程序中的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章
spring学习总结——装配Bean学习三(xml装配bean)