首页 > 解决方案 > 如何将 Spring 配置从 XML 重写为 Java

问题描述

我有这样的 Spring XML 配置文件:

<bean id="A" class="a.b.c.d.ConfigurationA" />
<bean class="a.b.c.d.ConfigurationB" />
<bean id="C" class="a.b.c.d.e.ConfigurationC" depends-on="objectFromConfigurationB" />

每个配置文件都导入其他配置类。例子:

@Configuration
@Import({ConfigA.class, ConfigB.class})
class ConfigurationA {

    @Bean 
    public ABC abc() {
        return new ABC();
    }
    ...
    ...
    ..
}

我想将此 XML 配置重写为 Java,以保持所有关系 ( depends-on)。我该怎么做?

我试过:

始终相同:内部配置文件中的 bean 不会加载到 spring 上下文中。我No bean 'A' available在启动过程中发现错误。

如何depends-on在导入配置包期间创建关系?

标签: javaspring

解决方案


使用组件扫描,您不需要做任何事情。

@Component
class A {
}


@Component {
class B {
}


@Componet {
class C {
    
   private final B b; 

   @Autowired
   C(B b) {
     this.b = b;
   }
}

在组件 C 中使用构造函数注入可以得到你想要的,不需要依赖。如果您是较新版本的spring,您甚至不需要@Autowired构造函数上的。

我将一个包含大约 10 个 XML spring 文件的项目转换为 Java 配置。我发现@Bean在 @Configuration 类中编写每个定义是不必要的,我认为这会导致启动时间更快但没有任何区别。使用组件扫描可以减少代码,并使事情变得更简单。如果您在 Spring Boot 上,您需要确保正在扫描其中包含代码的包,例如,如果您有库com.example.lib并且@SpringBootApplication类在,com.example.app那么 beancom.example.lib将不会被拾取,因为默认情况下它会仅扫描您的子包com.example.app将需要添加更多包以扫描到配置或将主 Spring Boot 应用程序类移动到com.example


推荐阅读