Spring 框架使用了多种设计模式,这些模式帮助其实现松耦合、高内聚和可扩展性。以下是 Spring 中常见的设计模式及其应用场景:
1. 工厂模式(Factory Pattern)
-
应用场景:Spring 的
BeanFactory
和ApplicationContext
是工厂模式的典型实现。 -
作用:通过工厂创建和管理 Bean 的实例,隐藏对象的创建细节,统一管理依赖关系。
2. 单例模式(Singleton Pattern)
-
应用场景:Spring 默认将 Bean 的作用域(Scope)设置为单例(Singleton)。
-
作用:确保每个 Bean 在容器中只有一个实例,减少资源开销。
3. 代理模式(Proxy Pattern)
-
应用场景:Spring AOP(面向切面编程)基于动态代理(JDK 动态代理或 CGLIB)实现。
-
作用:为对象提供代理以控制访问,用于日志、事务、安全等横切关注点。
4. 适配器模式(Adapter Pattern)
-
应用场景:
-
Spring MVC 中的
HandlerAdapter
:适配不同类型的处理器(如 Controller、Servlet)。 -
Spring AOP 中的
AdvisorAdapter
:适配不同通知类型(Advice)。
-
-
作用:统一接口,兼容不同实现。
5. 模板方法模式(Template Method Pattern)
-
应用场景:
JdbcTemplate
、RestTemplate
等模板类。 -
作用:定义算法骨架,将具体步骤延迟到子类实现(如
execute()
方法中的资源管理)。
6. 观察者模式(Observer Pattern)
-
应用场景:Spring 的事件驱动模型(
ApplicationEvent
和ApplicationListener
)。 -
作用:实现事件的发布-订阅机制,如上下文刷新事件、自定义业务事件。
7. 装饰者模式(Decorator Pattern)
-
应用场景:Bean 的包装增强(如
BeanWrapper
、AOP 对目标对象的增强)。 -
作用:动态地为对象添加额外职责。
8. 策略模式(Strategy Pattern)
-
应用场景:
-
资源加载策略(
ResourceLoader
)。 -
事务管理策略(如
PlatformTransactionManager
的不同实现)。
-
-
作用:定义算法族,灵活切换实现。
9. 责任链模式(Chain of Responsibility Pattern)
-
应用场景:
-
Spring Security 的过滤器链(
FilterChainProxy
)。 -
Spring MVC 的拦截器链(
HandlerInterceptor
)。
-
-
作用:将请求传递给多个处理器,依次处理。
10. 组合模式(Composite Pattern)
-
应用场景:
CompositeCacheManager
、Bean 定义的父子继承关系。 -
作用:以树形结构组合对象,统一对待单个对象和组合对象。
11. 原型模式(Prototype Pattern)
-
应用场景:Bean 的作用域设置为
prototype
。 -
作用:每次请求都创建新实例。
12. 建造者模式(Builder Pattern)
-
应用场景:
BeanDefinitionBuilder
、UriComponentsBuilder
。 -
作用:分步构建复杂对象,避免构造器参数过多。
13. 访问者模式(Visitor Pattern)
-
应用场景:处理复杂对象结构(如解析注解时的
AnnotationMetadataVisitor
)。 -
作用:将算法与对象结构分离,扩展性强。
14. 委派模式(Delegate Pattern)
-
应用场景:
DispatcherServlet
将请求分发给不同的处理器(Handler)。 -
作用:将任务委派给其他对象,实现解耦。
15. 状态模式(State Pattern)
-
应用场景:Spring Statemachine 模块(状态机实现)。
-
作用:根据对象状态改变其行为。
Spring 通过合理应用设计模式,实现了高度的灵活性和扩展性。这些模式不仅简化了开发,还使框架的核心功能(如 IoC、AOP、MVC)更加模块化和可维护。理解这些模式有助于深入掌握 Spring 的设计思想。