为什么我在Spring配置类中不需要@Autowired @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); } } 

谢谢!

@Autowire允许您将bean从上下文注入“外部世界”,外部世界就是您的应用程序。 由于@Configuration类属于“上下文世界”,因此无需显式自动assembly(从上下文中查找bean)。

想象一下从给定实例访问方法时的类比。 当您在实例范围内时,不需要将其写入访问实例方法,但外部世界必须使用实例引用。

编辑

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

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

具有@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正在构建其上下文时,它会查找类型为A的bean,它在配置类中也被定义为Bean,并在运行时将其自动assembly到B,以便B可以在需要时使用它。