我上课了:
public class Base
{
private MyExecutor executor;
}
如何使用new运算符创建类Base的新实例,并希望使用通过spring注入的MyExecutor的相同单例实例? 请建议。
答案 0 :(得分:2)
将执行程序声明为非原型(即不要将其作为原型,因为singleton是默认的)。从ApplicationContext中获取bean,将其传递给Base
。
另一种选择是将单例实例存储为Spring调用的构造函数中的MyExecutor
的静态字段。然后提供getInstance
静态方法。
答案 1 :(得分:1)
这是Spring默认执行的操作,它会注入相同的bean实例。例如,下面的B1和B2将默认获得相同的MyExecutor bean实例,除非您将MyExecutor bean范围从singleton
更改为prototype
或其他。
public class B1 {
@Autowired
private MyExecutor executor;
...
public class B2 {
@Autowired
private MyExecutor executor;
...
答案 2 :(得分:0)
你可以这样做:
ApplicationContext ctx = ...
YourClass someBeanNotCreatedBySpring = ...
ctx.getAutowireCapableBeanFactory().autowireBeanProperties(
someBeanNotCreatedBySpring,
AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT, true);
您可以在YourClass中使用@Autowired
等来指定要注入的字段等。
或者您可以将以下注释添加到Base和@Autowired
以指定要注入的字段
@Configurable(preConstruction=true,dependencyCheck=true,autowire=Autowire.BY_TYPE)
@EnableSpringConfigured
并遵循XMl COnfiguration
<context:load-time-weaver weaver-class="org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver" aspectj-weaving="on"/>
或
<context:load-time-weaver aspectj-weaving="autodetect"/>
关键概念是启用Load time weaving