我必须使用我公司的现有库,该库在Spring项目的@Configuration中打包了一堆@Bean,但是将添加为我项目的依赖项。情况类似于
@Configuration
Class A{
@Bean
B b(){
return new B()
}
}
@Configuration
Class C{
@Bean
D d(){
D d = new D();
//TODO: How do I use instance of B here
d.someConfiguration(B b);
return d;
}
}
我应该在C中使用new运算符来初始化A并调用方法b,还是应该直接在C中@Autowire B
。
答案 0 :(得分:2)
您可以通过多种方式进行操作
通过字段自动布线
@Configuration
Class C{
@Autowire
private B b;
@Bean
D d(){
D d = new D();
//TODO: How do I use instance of B here
d.someConfiguration(B b);
return d;
}
}
通过构造函数自动装配(我个人更喜欢使用构造函数自动装配,这将在测试案例中提供帮助)
@Configuration
Class C{
private B b;
@Autowire
public C(B b){
this.b=b;
}
@Bean
D d(){
D d = new D();
//TODO: How do I use instance of B here
d.someConfiguration(B b);
return d;
}
}
或者您也可以将其添加为spring可以解决的方法参数
@Configuration
Class C{
@Bean
D d(B b){
D d = new D();
//TODO: How do I use instance of B here
d.someConfiguration(B b);
return d;
}
}
答案 1 :(得分:1)
当您将库包含为依赖项时,springboot初始化时也会扫描这些库中的@Configuration
文件。因此,在这些上下文中声明的bean在春季上下文中已经可用。
所以您可以做的只是将其作为方法参数
@Configuration
Class C{
@Bean
D d(B b){
D d = new D();
d.someConfiguration(b);
return d;
}
}
一旦spring看到您想要一个bean(如果键入B),它将搜索并给您一个实例。
我会说在春季使用new
是邪恶的:)