18

我正在使用 Spring@Configuration注释来配置我的应用程序。

目前,我有一个@Configuration类,其中声明了我的所有 bean。随着 bean 数量的增加(超过 30 个),我想将它分成许多类。

一些 bean 使用公共类(主要是实用程序类):

Foo.class是一个实用类 Bar.classBaz.class都使用Foo.class

我想拥有Foo, Bar and Baz三个不同的@Configuration班级(分别Conf1, Conf2 and Conf3

问题是我无权访问Conf1from的实例Conf2 and Conf3

Conf1.class

@Configuration 
public class Conf1 {
    @Bean
    public Foo foo() {
        return new Foo();
    }
}

Conf2.class

@Configuration 
public class Conf2 {
    @Bean
    public Bar bar() {
        Bar bar = new Bar();
        bar.setFoo(conf1.foo()); // Not possible !
        return bar;
    }
}

Conf3.class

@Configuration 
public class Conf3 {
    @Bean
    public Baz baz() {
        Baz baz = new Baz();
        baz.setFoo(conf1.foo()); // Not possible !
        return baz;
    }
}

关于如何解决这个问题的任何想法?

4

3 回答 3

21

您应该能够自动装配它们:

@Configuration 
public class Conf2 {
    @Autowired
    Conf1 conf1;
    ...
}

或者,您可以自动装配 bean 而不是配置:

@Configuration 
public class Conf2 {
    @Autowired
    Foo foo;
    ...
}
于 2012-05-22T09:09:12.920 回答
19
@Configuration
@Import({ DataSourceConfig.class, TransactionConfig.class })
public class AppConfig extends ConfigurationSupport {
      // bean definitions here can reference bean definitions in DataSourceConfig or TransactionConfig
}
于 2016-03-18T11:29:47.163 回答
4

Spring 框架第 5 章很好地解释了它。

  • @ExternalBean :一个配置类可能需要引用在另一个配置类(或在 XML 中,就此而言)中定义的 bean。@ExternalBean 注解就提供了这样一种机制。当 JavaConfig 遇到注解为 @ExternalBean 的方法时,它会将该方法定义替换为在封闭的 bean 工厂中查找与方法名称同名的 bean

  • @Import:@Import 代表 JavaConfig 的 XML 配置元素的等价物。一个配置类可以导入任意数量的其他配置类,它们的 bean 定义将像本地定义一样处理

  • ConfigurationSupport:为方便起见,@Configuration 类可以扩展 ConfigurationSupport,主要是为了便于从封闭的 BeanFactory / ApplicationContext 中轻松查找 bean。

于 2019-07-22T16:13:46.360 回答