springboot中的设计模式
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中恶职责链模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南