我有一个原型Bean,它由一个带有Provider的singleton bean实例化:
@Component
@Scope("prototype")
class MyPrototype {}
@Component
class MySingleton {
@Autowired
javax.inject.Provider<MyPrototype> prototypeFactory;
}
这很好,但我们公司规定声明@Autowired是不允许的;常见的模式是@Resource(SingletonBeanClass.BEAN_ID).
是否可以通过这种方式注释Provider,以便Spring查找可以创建它?
我知道我可以使用@Lookup或单件工厂bean添加工厂方法,但我更喜欢Provider.
编辑:
我没有让它以这种方式工作,最后不得不编辑spring.xml;详见下文.
最佳答案 由于您有XML配置文件,您可以通过以下方式通过XML配置它:
<bean id="myPrototype" class="some.package.MyPrototype" scope="prototype" />
<bean id="mySingleton" class="some.package.MySingleton">
<lookup-method name="getPrototypeFactory" bean="myPrototype "/>
</bean>
这样,您必须使用getPrototypeFactory()访问myPrototype,而不是直接访问该属性.您甚至可以删除这两个类的注释.
有关任何额外的详细信息,您可以查看以下博客文章Injecting a prototype bean into a singleton bean