0

我有一堂课:


    public class Base
    {
    private MyExecutor executor;
    }

如何使用 new 运算符创建类 Base 的新实例,并希望使用通过 spring 注入的同一个 MyExecutor 单例实例?请建议。

4

3 回答 3

2

将执行程序声明为非原型(即不要将其设为原型,因为默认情况下是单例)。从 ApplicationContext 中获取 bean,将其传递给Base.

另一种选择是将单例实例存储为MyExecutorSpring 调用的构造函数的静态字段。然后提供一个getInstance静态方法。

于 2013-05-13T10:56:46.880 回答
1

这是 Spring 默认所做的,它注入相同的 bean 实例。例如,默认情况下,B1 和 B2 下面将获得相同的 MyExecutor bean 实例,除非您将 MyExecutor bean 范围从singletontoprototype或其他更改。

public class B1 {
    @Autowired
    private MyExecutor executor;
...

public class B2 {
    @Autowired
    private MyExecutor executor;
...    
于 2013-05-13T11:18:55.210 回答
0

你可以这样做:

   ApplicationContext ctx = ...
    YourClass someBeanNotCreatedBySpring = ...
    ctx.getAutowireCapableBeanFactory().autowireBeanProperties(
        someBeanNotCreatedBySpring,
        AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT, true);

您可以@Autowired在 YourClass 中使用 etc 来指定要注入的字段等。

或者您可以将以下注释添加到 Base 并@Autowired 指定要注入的字段

@Configurable(preConstruction=true,dependencyCheck=true,autowire=Autowire.BY_TYPE)
@EnableSpringConfigured

并遵循 XML 配置

<context:load-time-weaver weaver-class="org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver" aspectj-weaving="on"/>

或者

<context:load-time-weaver aspectj-weaving="autodetect"/>

关键概念是使Load time weaving

资源

于 2013-05-13T11:45:18.270 回答