Spring系列文章:Spring中的设计模式

一、简单⼯⼚模式

BeanFactory的getBean()⽅法,通过唯⼀标识来获取Bean对象。是典型的简单⼯⼚模式(静态⼯⼚模 式);

二、⼯⼚⽅法模式

FactoryBean是典型的⼯⼚⽅法模式。在配置⽂件中通过factory-method属性来指定⼯⼚⽅法,该⽅法 是⼀个实例⽅法。

三、单例模式

Spring⽤的是双重判断加锁的单例模式。请看下⾯代码,我们之前讲解Bean的循环依赖的时候⻅过:

四、 代理模式

Spring的AOP就是使⽤了动态代理实现的。

五、装饰器模式

JavaSE中的IO流是⾮常典型的装饰器模式。

Spring 中配置 DataSource 的时候,这些dataSource可能是各种不同类型的,⽐如不同的数据库: Oracle、SQL Server、MySQL等,也可能是不同的数据源:⽐如apache 提供的 org.apache.commons.dbcp.BasicDataSource、spring提供的 org.springframework.jndi.JndiObjectFactoryBean等。

这时,能否在尽可能少修改原有类代码下的情况下,做到动态切换不同的数据源?此时就可以⽤到装饰 者模式。

Spring根据每次请求的不同,将dataSource属性设置成不同的数据源,以到达切换数据源的⽬的。 Spring中类名中带有:Decorator和Wrapper单词的类,都是装饰器模式。

六、观察者模式

定义对象间的⼀对多的关系,当⼀个对象的状态发⽣改变时,所有依赖于它的对象都得到通知并⾃动更 新。Spring中观察者模式⼀般⽤在listener的实现。

Spring中的事件编程模型就是观察者模式的实现。在Spring中定义了⼀个ApplicationListener接⼝,⽤ 来监听Application的事件,Application其实就是ApplicationContext,ApplicationContext内置了⼏个 事件,其中⽐较容易理解的是:ContextRefreshedEvent、ContextStartedEvent、 ContextStoppedEvent、ContextClosedEvent

七、策略模式

策略模式是⾏为性模式,调⽤不同的⽅法,适应⾏为的变化 ,强调⽗类的调⽤⼦类的特性 。 getHandler是HandlerMapping接⼝中的唯⼀⽅法,⽤于根据请求找到匹配的处理器。

⽐如我们⾃⼰写了AccountDao接⼝,然后这个接⼝下有不同的实现类:AccountDaoForMySQL, AccountDaoForOracle。对于service来说不需要关⼼底层具体的实现,只需要⾯向AccountDao接⼝调 ⽤,底层可以灵活切换实现,这就是策略模式。

八、模板方法模式

Spring中的JdbcTemplate类就是⼀个模板类。它就是⼀个模板⽅法设计模式的体现。在模板类的模板⽅ 法execute中编写核⼼算法,具体的实现步骤在⼦类中完成

相关推荐
马优晨12 分钟前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
维天说3 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane19943 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
杨充4 小时前
11.DDD与战术建模
设计模式·开源·代码规范
杨充4 小时前
12.综合实战图片框架
设计模式·开源·代码规范
噢,我明白了4 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品4 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘4 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
Java内核笔记5 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端
糖果店的幽灵5 小时前
langgraph的 MessagesState 解读
java·开发语言·人工智能·windows·langgraph