Spring框架广泛使用了设计模式,以提高其灵活性、可扩展性和整体架构的清晰性。以下是一些在Spring框架中应用的设计模式:
- 工厂模式(Factory Pattern):
-
- Spring使用工厂模式通过BeanFactory和ApplicationContext接口创建和管理Bean实例。
- 单例模式(Singleton Pattern):
-
- 默认情况下,Spring容器中的Bean是单例的,这意味着Spring只为每个Bean创建一个实例。
- 原型模式(Prototype Pattern):
-
- 当需要多个实例时,可以将Bean的scope设置为prototype,每次请求Bean时,Spring都会创建一个新的实例。
- 代理模式(Proxy Pattern):
-
- Spring AOP(面向切面编程)使用代理模式(如JDK动态代理或CGLIB代理)来创建代理对象,以实现方法拦截和增强。
- 装饰器模式(Decorator Pattern):
-
- Spring的BeanWrapper是装饰器模式的实现,它提供了对Bean的属性进行操作的功能。
- 策略模式(Strategy Pattern):
-
- Spring中的Resource接口及其实现类是策略模式的例子,它们定义了访问不同类型资源的策略。
- 模板方法模式(Template Method Pattern):
-
- Spring的JdbcTemplate和其他模板类如RestTemplate使用了模板方法模式,它们提供了固定的算法骨架,并将一些步骤的实现延迟到子类。
- 观察者模式(Observer Pattern):
-
- Spring的事件发布和监听机制是基于观察者模式的,当一个事件被发布时,所有注册的监听器都会被通知。
- 适配器模式(Adapter Pattern):
-
- Spring AOP中的AdvisorAdapter是一个适配器,它允许使用不同的通知类型(如前置、后置、环绕通知)。
- 命令模式(Command Pattern):
-
- Spring的ApplicationContext中的事件机制使用了命令模式,其中事件是命令,监听器是接收者。
- 责任链模式(Chain of Responsibility Pattern):
-
- Spring MVC中的HandlerInterceptor允许你创建一个拦截器链,这些拦截器可以在请求处理之前或之后执行。
- 构建器模式(Builder Pattern):
-
- Spring的BeanDefinitionBuilder使用了构建器模式来构建BeanDefinition对象。
这些设计模式的运用使得Spring框架具有很高的模块化和灵活性,同时也使得开发人员能够更加方便地使用和扩展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 接口内部采用的是解释器模式。