为什么我在Spring配置类中不需要@Autowired @Bean方法?

Jan*_*ski 9 java spring dependency-injection

为什么这样做:

@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);
  }  
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Joh*_*ohn 13

@Autowire允许您将bean从上下文注入"外部世界",其中外部世界是您的应用程序.由于@Configuration类在"上下文世界"中,因此无需显式自动装配(从上下文中查找bean).

想象一下从给定实例访问方法时的类比.当您在实例范围内时,无需编写this访问实例方法,但外部世界必须使用实例引用.

编辑

编写@Configuration类时,您将为IOC创建的bean指定元数据.

@Autowire另一方面,注释允许您在应用程序中注入初始化的 bean而不是元数据.所以,没有必要进行显式注入,因为你在Configuration课堂上没有使用Beans .

  • 谢谢!这是在Spring文档的某个地方写的吗?“外部”世界与“上下文”世界之间的边界在哪里?:) (2认同)

mzo*_*zoz 6

嗨,简,你的问题在 4 年前被标记为已回答,但我找到了更好的来源:https : //www.logicbig.com/tutorials/spring-framework/spring-core/javaconfig-methods-inter-dependency.html

这是另一篇具有相同想法的文章:https : //dzone.com/articles/spring-configuration-and,它还指出这种用法没有得到很好的记录,我发现这是真的。(?)

所以基本上如果beanA的初始化依赖于beanB@Autowired只要你在应用程序上下文(即@Configuartion类)中声明这两个 bean ,spring 就会在没有显式注释的情况下连接它们。

在此处输入图片说明