java – 没有@Autowired的Spring Prototype-Bean Provider

我有一个原型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

点赞