这些天来,我正在研究如何在XML文件和/或Java表示法中使用Spring Core定义bean。这些方法似乎是等效的,但是如果我们添加以下条件,它们是否仍然如此?
在这种情况下,应将XML文件中写入的所有内容都写入AppConfig文件中(该类具有@Configuration
批注)。
可悲的是,我发现了一个反例:使用自动装配设置类成员(属性)。尽管可以在类成员定义的前面加上@Autowired
批注,但仅使用Java配置文件却不是这种情况。
@Component
public class Foo{
@Autowired
private Bar bar;
}
以下代码实际上是错误的:
public class AppConfig{
@Bean
Foo foo(){
Foo foo = new Foo();
@Autowired
Bar foo.bar ?? ;
return foo;
}
}
我已经搜索了所有文档和每个问题,但是我对此主题仍然感到困惑。
答案 0 :(得分:0)
让方法Foo foo()
接受Bar bar
作为参数。 Spring框架根据要注入的类型识别可用的bean实例。提防Bar
的更多bean实例,然后必须使用@Qualifier
来区分它们并注入正确的实例。无需再次使用@Autowired
。
@Bean
Foo foo(Bar bar){
Foo foo = new Foo();
foo.method(bar); // Or whatsoever...
return foo;
}
在D区有关injecting beans in Spring的文章中了解更多信息,可能会有所帮助。