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

标签 java spring

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

相关文章:

java - 编写 orm.xml 的最佳实践

java.lang.UnsupportedClassVersionError 即使 java -version 和 javac -version 相同

mysql - Cloudfoundry、Spring、MySQL 未知初始字符集索引 '192' 从服务器收到

java - 如何使用构造函数注入(inject)来限定bean

java - Spring mvc thymeleaf 。如何将白标签错误页面显示为模式或弹出窗口或 toast

java - 非法参数异常 : n must be positive

java - 通过代码访问 Facebook

java - 从名称为variableX的变量中检索数据 - Java

java - 带有 jdbc 存储的 Spring 中的 Quartz Cron 调度程序

java - hibernate 中加载关联的特定深度大小