为什么这样做:
@Configuration
public class MyConfig {
@Bean
public A getA() {
return new A();
}
@Bean <-- Shouldn't I need @Autowired here?
public B getB(A a) {
return new B(a);
}
}
谢谢!
答案 0 :(得分:12)
@Autowire
允许您将bean从上下文注入到#34;外部世界&#34;外部世界是你的应用。
由于@Configuration
类属于&#34; context world&#34;,因此无需显式自动装配(从上下文中查找bean)。
在从给定实例访问方法时,可以考虑类比。当您在实例范围内时,无需编写this
来访问实例方法,但外部世界必须使用实例引用。
修改强>
当您编写@Configuration
类时,您正在为将由IOC创建的bean指定元数据。
@Autowire
注释允许您在应用程序中注入初始化 bean,而不是元数据。因此,不需要显式注入,因为在Configuration
类内部时你不使用Beans。
答案 1 :(得分:1)
您好,扬(Jan),您的问题在4年前被标记为“已回答”,但我找到了一个更好的来源: https://www.logicbig.com/tutorials/spring-framework/spring-core/javaconfig-methods-inter-dependency.html
这是另一篇具有相同想法的文章: https://dzone.com/articles/spring-configuration-and,它也指出这种用法没有得到充分证明,我发现这是事实。 (?)
因此,基本上,如果beanA
的初始化依赖于beanB
,只要您在应用程序上下文中声明了这两个bean(即{{ 1}}类。
答案 2 :(得分:-1)
具有@Configuration批注的类是您为上下文定义bean的位置。但是spring bean应该定义自己的依赖项。你的四个案例B类应该在类定义中定义它自己的依赖项。例如,如果你的B级依赖于你的A级,那么它应该如下所示:
public class B
{
@Autowired
A aInstance;
public A getA()
{
return aInstance;
}
public void setA(A a)
{
this.aInstance = a;
}
}
在上面的情况下,当spring正在构建它的上下文时,它会查找bean的类型是A,它也在你的配置类中定义为Bean,并在运行时将它自动装配到B,以便B可以在必需的。