【发布时间】:2014-12-04 15:03:58
【问题描述】:
查找方法注入Provider<T>、ObjectFactory和factoryBean有什么区别。如果我想要一个原型的新实例(很多次)到一个单例中,它们中的哪一个是最好的解决方案?
如果我想将一个原型 bean 的新实例(多次)变成一个原型?
【问题讨论】:
标签: spring spring-mvc
查找方法注入Provider<T>、ObjectFactory和factoryBean有什么区别。如果我想要一个原型的新实例(很多次)到一个单例中,它们中的哪一个是最好的解决方案?
如果我想将一个原型 bean 的新实例(多次)变成一个原型?
【问题讨论】:
标签: spring spring-mvc
也请检查我的问题:How to instantiate spring managed beans at runtime?
据我了解, factoryBean 只是一种创建具有一些复杂实例化逻辑的 bean 的方法。在 xml 中很难定义这样的逻辑。在 spring 文档中有很好的解释:http://springindepth.com/book/in-depth-ioc-factory-bean.html
其他三个对我来说看起来很相似。但是,如果您查看一个 spring 问题https://jira.spring.io/browse/SPR-5192,您会发现 javax.inject.Provider 接口来自 JSR-330,我猜它是在 Spring 中实现的,比查找方法注入晚,看起来它是更好的解决方案。 (同样的事情在 Google Guice DI 中实现)
同样使用对象工厂,你必须结合spring代码编写(ObjectFactory需要spring导入):
@Autowired
private ObjectFactory<PrototypeBean> beanFactory;
//...
beanFactory.getObject()
更新 Lookup、beanFactory 和 Provider 不支持传递任何参数,即你有 Provider#get() 但没有 Provider#get(Object... args)
【讨论】: