0x00 基础

多例bean和单例bean,都使用注解@Component纳入到spring的管理,不同之处是多例bean使用注解@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)标注,而单例bean是默认的,或者显示的使用注解@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)标注。

0x01 AbstractApplicationContext.getBean

可以直接使用AbstractApplicationContext.getBean(Class<T> requiredType)获取一个多例bean的实例,每次都是新生成的。如果需要参数的话,可以使用AbstractApplicationContext.getBean(Class<T> requiredType, Object... args)方法。

0x02 FactoryBean.getObject()

也可以使用工厂bean来生成,实现FactoryBean接口即可。在getObject()方法里,使用new或其他方法生成你想要的bean即可。

0x03 为啥非要使用spring来管理多例

当然不是非要使用spring来管理多例,当然可以自己new一个使用。使用spring来管理多例的最大好处,就是可以和spring管理的其他bean进行交互,比如多例的生成依赖于spring管理的服务,或者多例执行某方法的时候依赖于spring管理的服务等等。

0x04 注意

注意,多例和单例虽说都由spring进行管理,但是单例是全生命周期都由spring进行管理的,而多例生成后基本上就不由spring进行管理了,所以如果要使用spring生命周期管理的某些方法和特性就要注意了(比如@PreDestroy@EventListener)。

标签: none

添加新评论