当前位置: 首页 > news >正文

Spring Boot 中应用的设计模式

Spring Boot 中应用的设计模式详解

Spring Boot 作为 Spring 框架的扩展,广泛使用了多种经典设计模式。以下是主要设计模式及其在 Spring Boot 中的具体应用:

一、创建型模式

1. 工厂模式 (Factory Pattern)

  • 应用场景
    • BeanFactoryApplicationContext 核心接口
    • @Bean 注解的方法本质是工厂方法
  • 示例
    @Configuration
    public class AppConfig {
        @Bean
        public DataSource dataSource() { // 工厂方法
            return new HikariDataSource();
        }
    }
    

2. 单例模式 (Singleton Pattern)

  • 实现方式
    • Spring 容器默认将所有 bean 作为单例管理
    • 通过 @Scope("singleton") 显式声明
  • 特点
    • 单例存储在 DefaultSingletonBeanRegistrysingletonObjects 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 缓存代理
  • 核心类
    • ProxyFactory
    • AopProxy

5. 装饰器模式 (Decorator Pattern)

  • 典型应用
    • HttpServletRequestWrapper 请求包装
    • Spring Cache 的 TransactionAwareCacheDecorator
  • 特点
    • 在不改变接口的情况下增强功能

6. 适配器模式 (Adapter Pattern)

  • 应用场景
    • Spring MVC 的 HandlerAdapter
    • RequestMappingHandlerAdapter 处理不同控制器类型
    • AOP 中的 MethodInterceptor 适配各种通知类型

三、行为型模式

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 自动配置是多种模式的完美结合:

  1. 工厂模式:通过 @EnableAutoConfiguration 触发配置类加载
  2. 策略模式AutoConfigurationImportSelector 选择配置策略
  3. 条件判断@Conditional 系列注解控制bean创建
  4. 装饰器模式BeanPostProcessor 增强bean功能

最佳实践建议

  1. 合理选择模式

    • 扩展功能优先使用组合而非继承
    • 复杂对象创建使用建造者模式
  2. 避免过度设计

    // 不推荐:简单场景没必要用工厂模式
    @Bean 
    public Foo simpleFoo() {
        return new Foo(); // 直接new即可
    }
    
  3. 模式组合示例(REST API设计):

    • 工厂模式创建服务实例
    • 策略模式处理不同业务逻辑
    • 装饰器模式添加日志/监控
    • 观察者模式处理业务事件

Spring Boot 通过这些设计模式实现了高度模块化和可扩展的架构,开发者理解这些模式能更高效地使用和扩展框架功能。

相关文章:

  • Spring Security + JWT 实现前后端分离权限控制实战教程
  • 机器人仿真:URDF与Gazebo
  • 学习MySQL的第九天
  • 【C++】 —— 笔试刷题day_15
  • Spring - 14 ( 5000 字 Spring 入门级教程 )
  • Linux网络http与https
  • LeetCode面试热题150中6-11题学习笔记(用Java语言描述)
  • 通过 spring ai 对接 deepseek ai 大模型通过向量数据库,完成 AI 写标书及构建知识库功能的设计与开发
  • 简约美观的地址发布页PHP源码带后台
  • 【3】k8s集群管理系列--包应用管理器helm之chart资源打包并推送到harbor镜像仓库
  • 粉末冶金齿轮学习笔记分享
  • Honor of Kings (S39) 13-win streak
  • Python中NumPy的随机操作
  • 5.1 GitHub订阅监控系统实战:FastAPI+SQLAlchemy高效架构设计与核心源码揭秘
  • 从一到无穷大 #45:InfluxDB MCP Server 构建:从工程实践到价值重构
  • 探秘 Python 网络编程:构建简单聊天服务器
  • RFID技术概览
  • 深入理解linux操作系统---第3讲 基本操作与基本管理
  • GD32的中断、定时器与PWM综合使用
  • FEA 仿真助力高速连接器设计中的信号完整性
  • 报纸门户网站建设方案/bt种子bt天堂
  • 新桥专业网站建设/seo学习网站