【问题标题】: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 文件放在哪里?有没有神奇的春天名字可以称呼它?

【问题讨论】:

    标签: java xml spring spring-boot configuration-files


    【解决方案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")
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 2012-03-03
      • 1970-01-01
      • 2022-01-19
      • 2016-12-08
      • 2011-06-30
      • 2012-07-09
      相关资源
      最近更新 更多