使用new关键字创建的Spring bean(@Component)中的自动assembly
我有两个春豆如下:
@Component("A") @Scope("prototype") public class A extends TimerTask { @Autowired private CampaignDao campaignDao; @Autowired private CampaignManager campManger; A(){ init_A(); } }
由于遗留代码,我必须用新关键字创建A的新对象
@Component("B") @Scope("prototype") public class B{ public void test(){ A a = new A(); } }
当运行 – >类A中的spring bean为null时,我可以创建一个Spring bean A的新实例并仍在其中使用自动assembly吗?
您的组件“A”不是由Spring容器创建的,因此不会注入依赖项。 但是,如果您需要支持一些遗留代码(我从您的问题中理解),您可以使用@Configurable
批注和构建/编译时编织:
@Configurable(autowire = Autowire.BY_TYPE) public class A extends TimerTask { // (...) }
然后,Spring将向组件A注入自动连接的依赖项,无论它是由容器本身实例化,还是由new
的实例化在一些遗留代码中。
例如,要使用maven插件设置构建时编织,您必须:
- 将
到Spring应用程序上下文中 - 配置Maven AspectJ插件 :
在构建插件部分:
org.codehaus.mojo aspectj-maven-plugin 1.4 1.6 UTF-8 org.springframework spring-aspects warning compile test-compile
…和依赖项部分:
org.springframework spring-aspects 3.1.1.RELEASE org.aspectj aspectjrt 1.6.11
有关详细信息,请参阅Spring参考: http : //static.springsource.org/spring/docs/current/spring-framework-reference/html/aop.html#aop-atconfigurable
因为您正在使用new运算符创建类A的对象,所以您无法获取该对象中的自动assembly字段并将其查找为null。 尝试从弹簧容器中取出豆子。
希望这对你有所帮助。 干杯。