Spring框架是一个庞大的生态系统,设计模式的应用广泛分布在其各个模块中。以下是针对你提到的设计模式,在Spring源码中的具体应用位置:
-
单例模式(Singleton Pattern):
- 在
org.springframework.beans.factory.support.DefaultListableBeanFactory
类中,通过getBean
方法获取Bean时,默认情况下会从缓存中返回同一个实例。 org.springframework.context.support.AbstractApplicationContext
也使用了单例模式来管理应用程序上下文。
- 在
-
工厂模式(Factory Pattern):
org.springframework.beans.factory.BeanFactory
接口定义了Bean的创建规范,而DefaultListableBeanFactory
是其默认实现之一。org.springframework.beans.factory.support.AbstractBeanFactory
提供了创建Bean的基本逻辑,并且可以被子类扩展以支持不同的Bean创建策略。
-
代理模式(Proxy Pattern):
- AOP相关的代理机制主要在
org.springframework.aop.framework
包下实现,例如JdkDynamicAopProxy
用于JDK动态代理,CglibAopProxy
用于CGLIB代理。 org.springframework.transaction.interceptor.TransactionProxyFactoryBean
为事务管理提供代理支持。
- AOP相关的代理机制主要在
-
装饰器模式(Decorator Pattern):
- 在
org.springframework.security.config.method.InterceptMethodsBeanDefinitionDecorator
类中,实现对 BeanDefinition 的装饰,添加安全检查逻辑,它扩展了 BeanDefinitionDecorator 接口,并实现了对方法级别的安全拦截,在不改变原有 BeanDefinition 结构的情况下,动态地添加了安全相关的元数据和行为。
- 在
-
模板方法模式(Template Method Pattern):
org.springframework.jdbc.core.JdbcTemplate
和org.springframework.web.client.RestTemplate
等类都遵循了模板方法模式,它们定义了一组操作数据库或进行HTTP请求的基础步骤,允许用户通过继承或配置自定义某些特定行为。
-
观察者模式(Observer Pattern):
org.springframework.context.ApplicationEventPublisher
接口及其默认实现ApplicationEventMulticaster
实现了事件发布与监听的功能。org.springframework.context.event.EventListenerMethodProcessor
负责处理带有@EventListener
注解的方法,使其成为事件监听器。
-
适配器模式(Adapter Pattern):
- 在MVC框架中,
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
将不同类型的控制器适配成统一接口供前端控制器调用。
- 在MVC框架中,
-
策略模式(Strategy Pattern):
- 事务管理方面,
org.springframework.transaction.PlatformTransactionManager
定义了一个事务管理策略接口,不同的实现如DataSourceTransactionManager
、JtaTransactionManager
提供了不同的事务处理方式。
- 事务管理方面,
-
责任链模式(Chain of Responsibility Pattern):
- 基于
org.springframework.web.servlet.HandlerInterceptor
类的实现构成了一个拦截器链,用于在请求处理的不同阶段(如预处理、后处理、完成处理)插入额外的逻辑。 HandlerInterceptorAdapter
提供了默认实现,开发者可以通过继承该类来创建自定义拦截器。HandlerExecutionChain
类管理这些拦截器的执行顺序,并确保每个拦截器都能按需处理请求。SecurityFilterChain
是Spring Security中使用责任链模式的一个典型例子。它由一系列 Filter 组成,负责处理安全相关的任务,如认证、授权等。
- 基于