题目:Spring 中用到了哪些设计模式?
难度:difficulty/high
评分:⭐⭐⭐☆☆(3/5)
Spring 中使用设计模式主要有:单例模式(对象管理)、工厂模式(创建对象)、创建者模式、模板模式(RestTemplate、RedisTemplate、JdbcTemplate 等)、策略模式、代理模式(AOP)、责任链模式、观察者模式。
优点:列举 8 个模式较全(单例/工厂/模板/策略/代理/责任链/观察者)。
不足:"创建者"不准确(Spring 主要是工厂方法 + 建造者,如 BeanDefinitionBuilder);缺每个模式的具体类。
补充:单例=默认 scope;代理=JDK 动态代理/CGLIB;模板=JdbcTemplate/RestTemplate;观察者=ApplicationEvent/Listener。
最后更新:2026-10-27 · 基于第 1 次作答
结论:Spring 常考单例/工厂/代理/模板/观察者/责任链/策略,每个要能对应具体实现类。 关键词:单例默认 scope · AOP 代理 · JdbcTemplate 模板 边界:别背清单,要能说"模式解决什么、Spring 哪里用"。
核心考点定位:考察设计模式与 Spring 组件的对应,是否理解模式解决什么问题。面试官想排除"报一堆名字但说不出具体类"的空泛回答。
机制链(≥3 环):
证据锚点(≥12):
DefaultSingletonBeanRegistry:单例缓存(singletonObjects Map)BeanFactory:工厂模式,顶层容器FactoryBean:对象工厂钩子JdkDynamicAopProxy:JDK 动态代理(接口)CglibAopProxy:CGLIB 代理(类)JdbcTemplate:模板方法,流程骨架RestTemplate:模板方法,HTTP 流程RedisTemplate:模板方法,Redis 操作ApplicationEvent:观察者,事件ApplicationListener:观察者,监听器HandlerInterceptor:责任链,MVC 拦截器Resource:策略,资源抽象BeanDefinitionBuilder:建造者,构建 BeanDefinitionRequestMappingHandlerMapping:策略,URL 映射实现ProxyFactoryBean:工厂,AOP 代理工厂@Transactional:AOP 事务切面典型应用对比与权衡:
| 模式 | Spring 体现 | 解决的问题 | 适用 |
|---|---|---|---|
| 单例 | 默认 scope | 对象复用 | 无状态服务 |
| 代理 | AOP(JDK/CGLIB) | 横切解耦 | 事务/日志/鉴权 |
| 模板方法 | JdbcTemplate | 固定流程+细节定制 | 资源访问 |
| 观察者 | ApplicationEvent | 事件解耦 | 业务事件 |
| 责任链 | Interceptor/Filter | 请求多级处理 | Web 过滤链 |
| 工厂 | BeanFactory/FactoryBean | 对象创建解耦 | IoC 容器 |
常见误区:
适用边界:设计模式在 Spring 是恰当时机恰当使用;单例要求 Bean 无状态;事件监听若处理慢会阻塞发布方,需异步;模板方法不适用于流程需要大改的场景。代理模式对自调用(同类 this 调用)失效,需要暴露代理或拆分方法。
【结论】 面试官您好,Spring 是设计模式的应用典范,我按创建/结构/行为三类挑核心来讲,每个都对应具体类。
【三点】 第一,创建型——单例:默认 scope=singleton,DefaultSingletonBeanRegistry 缓存;工厂:BeanFactory/FactoryBean;建造者:BeanDefinitionBuilder。第二,结构型——代理:AOP 用 JDK 动态代理(接口)或 CGLIB(类),Spring Boot 2+ 默认 CGLIB。第三,行为型——模板:JdbcTemplate/RestTemplate/RedisTemplate 固定流程骨架;观察者:ApplicationEvent + ApplicationListener(默认同步,@Async 可异步);责任链:HandlerInterceptor/Filter 链;策略:Resource 接口多实现。
【边界】 当然,设计模式不是越多越好,Spring 在恰当时机用恰当模式,别背清单,要能说清"这个模式解决什么问题、Spring 哪里用了";单例要求 Bean 无状态,事件监听别拖慢发布方。
| # | 日期 | 评分 | 本轮主要问题 | 记录 |
|---|---|---|---|---|
| 1 | 2026-10-27 | 3/5 | "创建者"不准,缺模式对应类 | 第 1 次 |