目录

spring中用到的设计模式

spring中用到的设计模式

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 组合多个缓存管理器。