java为什么在Spring配置类中不需要@Autowired on@Bean方法?
为什么这样做有效:
@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);
}
}
谢谢
# 1 楼答案
@Autowire
允许您将bean从上下文注入到“外部世界”,外部世界就是您的应用程序。 由于使用@Configuration
类,您处于“上下文世界”中,因此不需要显式地自动连接(从上下文查找bean)当从给定实例访问方法时,可以考虑类似的类比。当您在实例范围内时,不需要写
this
来访问实例方法,但外部世界必须使用实例引用编辑
当您编写
@Configuration
类时,您正在为将由IOC创建的bean指定元数据另一方面
@Autowire
注释允许您在应用程序中注入初始化的bean,而不是元数据。因此,不需要显式注入,因为在Configuration
类中不使用bean# 2 楼答案
带有@Configuration注释的类是为上下文定义bean的地方。但是Springbean应该定义自己的依赖项。您的案例B类应该在类定义中定义自己的依赖项。例如,如果您的B类取决于您的A类,则应如下所示:
在上面的例子中,当spring构建它的上下文时,它会查找bean,它的类型是A,在您的配置类中也被定义为bean,并在运行时将其自动连接到B,以便B可以在需要时使用它
# 3 楼答案
你好,简,你的问题标记为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(即@Configuartion
类),spring就会在没有显式@Autowired
注释的情况下连接它们