![](/img/trans.png)
[英]Spring bean in Configuration class not being autowired in a bean defined in .xml file
[英]Why do I not need @Autowired on @Bean methods in a Spring configuration class?
为什么这样做:
@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);
}
}
谢谢!
@Autowire
允许您将 bean 从上下文注入到“外部世界”,其中外部世界是您的应用程序。 由于使用@Configuration
类,您处于“上下文世界”中,因此无需显式自动装配(从上下文查找 bean)。
想想从给定实例访问方法时的类比。 当您在实例范围内时,无需编写this
来访问实例方法,但外部世界将不得不使用实例引用。
编辑
当您编写@Configuration
类时,您正在为将由 IOC 创建的 bean 指定元数据。
另一方面,@ @Autowire
注释允许您在应用程序中注入已初始化的bean,而不是元数据。 因此,不需要显式注入,因为在Configuration
类中时您没有使用 Bean。
嗨,简,你的问题在 4 年前被标记为已回答,但我找到了更好的来源: https : //www.logicbig.com/tutorials/spring-framework/spring-core/javaconfig-methods-inter-dependency.html
这是另一篇具有相同想法的文章: https : //dzone.com/articles/spring-configuration-and ,它还指出这种用法没有得到很好的记录,我发现这是真的。 (?)
所以基本上如果beanA
的初始化依赖于beanB
,只要你在应用程序上下文(即@Configuartion
类)中声明这两个 bean,spring 就会在没有显式@Autowired
注释的情况下连接它们。
带有 @Configuration 注释的类是您为上下文定义 bean 的地方。 但是 Spring bean 应该定义自己的依赖项。 四你的case B类应该在类定义中定义它自己的依赖项。 例如,如果您的 B 类取决于您的 A 类,则它应该如下所示:
public class B
{
@Autowired
A aInstance;
public A getA()
{
return aInstance;
}
public void setA(A a)
{
this.aInstance = a;
}
}
在上述情况下,当 spring 正在构建其上下文时,它会查找类型为 A 的 bean,该 bean 在您的配置类中也定义为 Bean,并在运行时将其自动装配到 B,以便 B 可以在需要时使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.