我有一个原型(prototype) Bean,它由带有 Provider
的单例 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
关于java - 没有@Autowired的Spring Prototype-Bean Provider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46662908/