使用Spring 3.1。如果我想检索一个带有原型范围的bean(即我每次都想要一个不同的类实例),是否可以在不使用ApplicationContextaware类的情况下检索bean?
这就是我目前的工作方式
@Component
@Qualifier("MyService")
public class MyServiceImpl implements MyService {
@Override
public void doSomething() {
Blah blah = (Blah)ApplicationContextProvider.getContext().getBean("blah");
blah.setThing("thing");
blah.doSomething();
}
}
@Component("blah")
@Scope("prototype")
public class Blah {
....
}
ApplicationContextProvider实现ApplicationContextAware。
是否可以使用注释或简单的Spring配置执行此操作而无需使用ApplicationContextAware类?
答案 0 :(得分:1)
Spring有一些相当有害的方法来实现你所追求的......
在Google上搜索spring代理范围也会产生一些结果......
答案 1 :(得分:0)
您真的不需要ApplicationContextAware。你只需要一个BeanFactory(ApplicationContextAware只是一种方便的方法)。
具有范围原型的bean只意味着每次调用ApplicationContext.getBean时都会创建一个新的bean实例。如果您尝试在单例中注入原型bean,那么您的原型bean将被注入一次(因此不再是原型)。
如果您确实需要,可以使用method injection来帮助您,但它比简单地调用applicationContext.getBean()更复杂。