springboot的注入默认范围是单例,但是实际上是有几个范围可选的,如下:
1)singleton: 单例,默认
2)prototype:多例
3)request:在一次http请求内有效
4)session:在一个用户会话内有效
5)globalSession:在全局会话内有效
一、一个类只有唯一一个实例
这种情况最简单也最常见,我们可以在类上标识@Component,然后再需要这个实例的地方通过@Autowired直接依赖注入。
二、一个类有有限多个实例,且是在编码时是可知的
一个实践中的例子是DataSource,一个项目中用到多个数据库,就会有多个DataSource的实例。
具体有几个,是提前确定写在配置文件的,这种情况的Bean可以通过@Bean(name = "master")的方式创建Bean
然后通过@Autowired@Qualifier("master")的方式引用对应名称的Bean
请参考在springboot中使用jdbcTemplate(2)-多数据源
三、原型模式,一个类有无限多个实例,每次调用生成新实例
这种情况需要在定义Bean时指定原型模式@Scope("prototype"),
在引用Bean的时候使用@Lookup注解,就可以每次都生成一个新对象
四、一个类有多个实现类,每个实现类都有且只有一个实例
这种就是典型的工厂方法,具体实现请参考springboot中使用工厂方法
五、spring中的观察者模式
spring事件监听参考Spring事件监听(转)
六、spring中的模板模式
七、spring中恶职责链模式