为什么我在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可以在需要时使用它。
- 在JSF 2.0中注入Bean
- 命名CDI bean的默认范围是什么?
- 使用自定义参数注入变量而不创建2个guice helper接口?
- Jersey2,Hk2dependency injection(自动)给出AbstractMethodError:org.jvnet.hk2.internal.DynamicConfigurationImpl.addIdempotentFilter
- spring @Autowire property vs setter
- 解释这个Spring MVC Controller的行为
- 为单个maven项目创建两个工件(war)
- 如何在Spring中使用@ComponentScan懒洋洋地加载所有bean?
- 当我使用autowire和组件注释时,不会注入或创建我的spring bean