使用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插件设置构建时编织,您必须:

  1. 到Spring应用程序上下文中
  2. 配置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。 尝试从弹簧容器中取出豆子。

希望这对你有所帮助。 干杯。