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

2022-09-02 01:16:12

为什么这样做:

@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 从上下文注入“外部世界”,其中外部世界是您的应用程序。由于使用类,您处于“上下文世界”中,因此无需显式自动连接(从上下文中查找bean)。@Configuration

考虑一下类比,例如从给定实例访问方法时。当您在实例范围内时,无需写入访问实例方法,但外部世界必须使用实例引用。this

编辑

编写类时,您正在为将由 IOC 创建的 Bean 指定元数据。@Configuration

@Autowire另一方面,注释允许您在应用程序中注入初始化的bean,而不是元数据。因此,不需要显式注入,因为您在类内不使用Bean。Configuration


答案 2

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

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

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

enter image description here


推荐