Spring多个@Configuration类

时间:2012-05-22 08:49:32

标签: java spring

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

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

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

Foo.class 是一个实用工具类 Bar.class Baz.class 都使用 Foo.class

我希望在三个不同的@Configuration类(分别为Conf1,Conf2和Conf3)中使用Foo,Bar和Baz

问题是我无法从Conf2和Conf3访问Conf1的实例:

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;
    }
}

有关如何解决此问题的任何想法?

3 个答案:

答案 0 :(得分:14)

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

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

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

@Configuration 
public class Conf2 {
    @Autowired
    Foo foo;
    ...
}

答案 1 :(得分:7)

@Configuration
@Import({ DataSourceConfig.class, TransactionConfig.class })
public class AppConfig extends ConfigurationSupport {
      // bean definitions here can reference bean definitions in DataSourceConfig or TransactionConfig
}

答案 2 :(得分:0)

Spring框架chapter-5很好地解释了它。

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

  • @导入: @Import表示JavaConfig等同于XML配置的 元件。一个配置类可以导入任意数量的其他配置 类,以及它们的bean定义将像本地定义一样进行处理

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