Spring 框架中用到了哪些设计模式?请举例说明

工厂方法模式:AbstractBeanFactory 。

抽象工厂模式:在 Spring 中,BeanFactory

单例模式:Spring中创建单例。

建造者模式:解析xml文件

原型模式:在创建ioc容器后,通过getBean()获取bean对象时,往里追可以发现在核心方法处spring对bean的scope属性进行了判断,配置了prototype时。

适配器模式:spring AOP中的MethodBeforeAdviceAdapter类。

装饰模式:TransactionAwareCacheDecorator 类

代理模式:spring中代理有两种,Jdk代理方式和CGLIB。

外观模式:Tomcat 中,catalina.jar 中的 RequestFacade 和 ResponseFacade 。

桥接模式:JDBC

组合模式:CompositeCacheManager,Mybatis 在处理 xml 动态 sql 中用到了。

享元模式:String常量池, Integer 的静态内部类 IntegerCache。

策略模式:Cglib2AopProxy和JdkDynamicAopProxy分别代表两种策略的实现方式。

模板方法模式:JdbcTemplate实现了一系列常用的数据访问的算法骨架。

观察者模式: ApplicationListener, ContextLoaderListener等。

迭代器模式:集合。

责任链模式:handler,filter,Intercept。

命令模式:Tomcat 中命令模式在 Connector 和 Container 组件之间有体现。

备忘录模式:spring-webflow 中的stateManageableMessageContext.createMessageMemento()

状态模式:spring-statemachine spring状态机

访问者模式:Spring 中的 BeanDefinitionVisitor 类主要用于访问 BeanDefinition。

中介者模式:Java web 开发中 MVC 模式(Model-View-Controller)就用到了中介者模式,Controller 就是 Model 和 View 的中介

解释器模式:在 Spring 中,ExpressionParser 接口内部采用的是解释器模式。

更新 2025年5月6日