Java Spring多个@Configuration类
我正在使用SpringJava 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访
@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