申明:本文已迁移到百家号http://baijiahao.baidu.com/builder/preview/s?id=1641275124389585515,欢迎移步
spring 的bean默认是单例,这个用spring的人基本都知道。
如果需要多个实例,又要使用ioc怎么办呢?
当然是使用@Scope注解,指明ConfigurableBeanFactory.SCOPE_PROTOTYPE了。
/**
* Scope identifier for the standard singleton scope: "singleton".
* Custom scopes can be added via {@code registerScope}.
* @see #registerScope
*/
String SCOPE_SINGLETON = "singleton";
/**
* Scope identifier for the standard prototype scope: "prototype".
* Custom scopes can be added via {@code registerScope}.
* @see #registerScope
*/
String SCOPE_PROTOTYPE = "prototype";
但是在使用过程中发现这样依然是单例。
如果给一个组件加上
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
每次请求它的实例,spring的确会给返回一个新的。问题是这个多例对象是被其他单例服务依赖的。
而单例服务初始化的时候,多例对象就已经被创建好了。当你去使用单例服务的时候,多例对象也不会被再次创建了。
那怎么解决呢?
本文已迁移到百家号http://baijiahao.baidu.com/builder/preview/s?id=1641275124389585515,欢迎移步
总结:
我倾向于使用第3和第5种方法。