1. 单例模式(Singleton Pattern)
应用场景:Spring 默认的 Bean 作用域为单例,确保容器中每个 Bean 仅有一个实例,节省资源并提高性能。
实现方式:通过 BeanFactory 或 ApplicationContext 管理单例 Bean,使用 ConcurrentHashMap 存储单例实例。
2. 工厂模式(Factory Pattern)
简单工厂:BeanFactory 根据配置动态创建 Bean,例如通过 XML 或注解定义 Bean 的创建逻辑。
工厂方法:通过 @Bean 注解在配置类中定义工厂方法,例如自定义 FactoryBean 实现复杂对象的创建。
抽象工厂:ApplicationContext 作为高级工厂,扩展了 BeanFactory 的功能,支持国际化、事件发布等。
3. 代理模式(Proxy Pattern)
应用场景:Spring AOP 基于代理模式实现,通过 JDK 动态代理或 CGLIB 生成代理类,在目标方法前后添加日志、事务等横切逻辑。
核心实现:ProxyFactory 和 JdkDynamicAopProxy 负责生成代理对象。
4. 模板方法模式(Template Method Pattern)
应用场景:JdbcTemplate、RestTemplate 等封装通用操作流程(如数据库连接管理),将具体实现(如 SQL 执行)延迟到回调方法。
优势:减少重复代码,提升扩展性。
5. 观察者模式(Observer Pattern)
应用场景:Spring 事件机制(如 ApplicationEvent 和 ApplicationListener)实现解耦的事件发布与订阅,例如容器启动、Bean 初始化完成等事件的通知。
6. 适配器模式(Adapter Pattern)
应用场景:Spring MVC 中的 HandlerAdapter 将不同处理器(如 Controller)适配到统一的请求处理流程中。
示例:RequestMappingHandlerAdapter 处理基于注解的控制器方法。
7. 策略模式(Strategy Pattern)
应用场景:资源加载策略(如 Resource 接口的不同实现类)、事务管理策略等,允许运行时动态选择算法。
扩展性:通过 BeanPostProcessor 接口支持自定义策略扩展。
8. 装饰器模式(Decorator Pattern)
应用场景:包装对象以增强功能,例如 Spring 的事务管理包装数据源,或在 AOP 中动态添加行为。
9. 原型模式(Prototype Pattern)
应用场景:通过设置 Bean 的 scope=“prototype”,每次请求生成新实例,适用于需要状态隔离的场景。
10. 依赖注入模式(Dependency Injection)
核心机制:Spring 通过构造器注入、Setter 注入等方式解耦对象依赖关系,由容器管理 Bean 的生命周期。
其他设计模式
责任链模式:用于拦截器链(如 HandlerInterceptor)处理请求。
组合模式:CompositeCacheManager 组合多个缓存管理器。