Spring Boot 中应用的设计模式详解
Spring Boot 作为 Spring 框架的扩展,广泛使用了多种经典设计模式。以下是主要设计模式及其在 Spring Boot 中的具体应用:
一、创建型模式
1. 工厂模式 (Factory Pattern)
- 应用场景:
BeanFactory
和ApplicationContext
核心接口@Bean
注解的方法本质是工厂方法
- 示例:
@Configuration public class AppConfig { @Bean public DataSource dataSource() { // 工厂方法 return new HikariDataSource(); } }
2. 单例模式 (Singleton Pattern)
- 实现方式:
- Spring 容器默认将所有 bean 作为单例管理
- 通过
@Scope("singleton")
显式声明
- 特点:
- 单例存储在
DefaultSingletonBeanRegistry
的singletonObjects
Map 中 - 非线程安全对象需配合
ThreadLocal
使用
- 单例存储在
3. 建造者模式 (Builder Pattern)
- 典型应用:
RestTemplateBuilder
SpringApplicationBuilder
- 示例:
new RestTemplateBuilder() .rootUri("https://api.example.com") .defaultHeader("Authorization", "Bearer token") .build();
二、结构型模式
4. 代理模式 (Proxy Pattern)
- 实现形式:
- JDK 动态代理(基于接口)
- CGLIB 代理(基于类继承)
- 应用场景:
- AOP 实现(
@Transactional
等) @Cacheable
缓存代理
- AOP 实现(
- 核心类:
ProxyFactory
AopProxy
5. 装饰器模式 (Decorator Pattern)
- 典型应用:
HttpServletRequestWrapper
请求包装- Spring Cache 的
TransactionAwareCacheDecorator
- 特点:
- 在不改变接口的情况下增强功能
6. 适配器模式 (Adapter Pattern)
- 应用场景:
- Spring MVC 的
HandlerAdapter
RequestMappingHandlerAdapter
处理不同控制器类型- AOP 中的
MethodInterceptor
适配各种通知类型
- Spring MVC 的
三、行为型模式
7. 模板方法模式 (Template Method)
- 典型实现:
JdbcTemplate
/RestTemplate
AbstractController
基类
- 特点:
public class JdbcTemplate { public <T> T query(String sql, ResultSetExtractor<T> rse) { // 固定流程:获取连接→创建语句→执行查询→处理结果→释放资源 Connection con = DataSourceUtils.getConnection(obtainDataSource()); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql); return rse.extractData(rs); // 可变部分委托给回调接口 } }
8. 观察者模式 (Observer Pattern)
- 实现机制:
ApplicationEvent
事件体系@EventListener
注解
- 示例:
// 定义事件 public class OrderEvent extends ApplicationEvent { ... } // 发布事件 applicationContext.publishEvent(new OrderEvent(this, order)); // 监听事件 @EventListener public void handleOrderEvent(OrderEvent event) { ... }
9. 策略模式 (Strategy Pattern)
- 应用场景:
- 多数据源切换 (
AbstractRoutingDataSource
) - 缓存管理器 (
CacheManager
接口的不同实现) - 认证策略 (
AuthenticationProvider
体系)
- 多数据源切换 (
四、组合使用的高级模式
10. 组合模式 (Composite Pattern)
- 应用案例:
CompositeCacheManager
组合多个缓存管理器- Spring Security 的
SecurityFilterChain
11. 责任链模式 (Chain of Responsibility)
- 典型实现:
- Spring Security 过滤器链
HandlerExecutionChain
处理请求
12. 门面模式 (Facade Pattern)
- 代表实现:
SpringApplication
类封装启动复杂度JdbcTemplate
隐藏原生JDBC复杂性
五、Spring Boot 特有模式应用
13. 条件化配置 (Conditional)
- 实现机制:
@Conditional
系列注解- 自动配置的核心模式 (
AutoConfigurationImportSelector
)
- 示例:
@Configuration @ConditionalOnClass(DataSource.class) public class DataSourceAutoConfiguration { ... }
14. 约定优于配置 (Convention over Configuration)
- 体现方面:
- 默认属性配置 (
application.properties
自动加载) - 静态资源默认路径 (
/static
,/public
)
- 默认属性配置 (
六、设计模式在自动配置中的综合应用
Spring Boot 自动配置是多种模式的完美结合:
- 工厂模式:通过
@EnableAutoConfiguration
触发配置类加载 - 策略模式:
AutoConfigurationImportSelector
选择配置策略 - 条件判断:
@Conditional
系列注解控制bean创建 - 装饰器模式:
BeanPostProcessor
增强bean功能
最佳实践建议
-
合理选择模式:
- 扩展功能优先使用组合而非继承
- 复杂对象创建使用建造者模式
-
避免过度设计:
// 不推荐:简单场景没必要用工厂模式 @Bean public Foo simpleFoo() { return new Foo(); // 直接new即可 }
-
模式组合示例(REST API设计):
- 工厂模式创建服务实例
- 策略模式处理不同业务逻辑
- 装饰器模式添加日志/监控
- 观察者模式处理业务事件
Spring Boot 通过这些设计模式实现了高度模块化和可扩展的架构,开发者理解这些模式能更高效地使用和扩展框架功能。