我有两个 Spring Bean ,如下所示:

@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的新实例并在其中仍然使用 Autowiring 吗?

最佳答案

您的组件“A”不是由Spring容器创建的,因此不会注入(inject)依赖项。但是,如果您需要支持一些旧代码(据我的问题理解),则可以使用@Configurable批注并构建/编译时间编织:

@Configurable(autowire = Autowire.BY_TYPE)
public class A extends TimerTask {
  // (...)
}

然后,Spring会将 Autowiring 的依赖项注入(inject)到组件A中,无论它是由容器本身实例化的,还是由new在某些旧版代码中实例化的。

例如,要使用maven插件设置构建时编织,您必须:
  • <context:spring-configured/>添加到Spring应用程序上下文
  • 配置Maven AspectJ plugin:

  • 在“构建插件”部分中:
    <build>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>aspectj-maven-plugin</artifactId>
          <version>1.4</version>
          <configuration>
            <complianceLevel>1.6</complianceLevel>
            <encoding>UTF-8</encoding>
            <aspectLibraries>
              <aspectLibrary>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
              </aspectLibrary>
            </aspectLibraries>
            <!--
              Xlint set to warning alleviate some issues, such as SPR-6819.
              Please consider it as optional.
              https://jira.springsource.org/browse/SPR-6819
            -->
            <Xlint>warning</Xlint>
          </configuration>
          <executions>
            <execution>
              <goals>
                <goal>compile</goal>
                <goal>test-compile</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
    

    ...以及依赖项部分:
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>3.1.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.6.11</version>
    </dependency>
    

    请查阅Spring引用以获取更多详细信息:
    http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop.html#aop-atconfigurable

    10-06 05:09
    查看更多