Java Spring多个@Configuration类

Java Spring多个@Configuration类,java,spring,Java,Spring,我正在使用Spring@Configuration注释来配置我的应用程序 目前,我有一个@Configuration类,其中声明了我的所有bean。随着bean数量的增长(超过30个),我想把它分成许多类 一些bean使用公共类(主要是实用类): class是一个实用类 Bar.class和Baz.class都使用Foo.class 我想将所有的Foo、Bar和Baz放在三个不同的@Configuration类中(分别是Conf1、Conf2和Conf3) 问题是我无法从Conf2和Conf3访

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

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

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

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

我想将所有的
Foo、Bar和Baz
放在三个不同的
@Configuration
类中(分别是
Conf1、Conf2和Conf3

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

Conf1.class

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

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

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

您知道如何解决此问题吗?

您应该能够自动连接它们:

@Configuration 
public class Conf2 {
    @Autowired
    Conf1 conf1;
    ...
}
或者,您可以自动连接bean而不是配置:

@Configuration 
public class Conf2 {
    @Autowired
    Foo foo;
    ...
}
Spring框架很好地解释了这一点

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

  • @Import: @Import表示JavaConfig与XML配置的等价物 元素。一个配置类可以导入任意数量的其他配置 类以及它们的bean定义将被当作本地定义来处理

  • 配置支持: 为了方便,@Configuration classes可以扩展ConfigurationSupport,主要是为了方便从封装的BeanFactory/ApplicationContext中轻松查找bean


这正是我所需要的,因为我有多个数据源,这是一种将它们全部挂在SpringWebConfig.class上的干净方法。