外观
一句话答案
Spring 大量应用设计模式:工厂(BeanFactory)、单例(Bean 默认)、代理(AOP)、模板方法(JdbcTemplate)、观察者(事件)、责任链(Filter)。
核心要点
Spring 是设计模式的集大成者,几乎每个核心组件都能找到经典模式的影子:
| 设计模式 | Spring 中的体现 | 说明 |
|---|---|---|
| 工厂模式 | BeanFactory、ApplicationContext | IoC 容器本身就是一个大工厂,通过配置/注解创建并管理 Bean |
| 单例模式 | Bean 默认作用域 singleton | Spring Bean 默认单例,由容器保证唯一性(非传统私有构造函数方式) |
| 代理模式 | Spring AOP(JDK 动态代理 / CGLIB) | @Transactional、@Async、@Cacheable 等注解的底层实现 → 详见 Module 07 |
| 模板方法模式 | JdbcTemplate、RedisTemplate、RestTemplate | 定义操作骨架(获取连接→执行→释放资源),用户只需传入具体 SQL/操作逻辑 |
| 观察者模式 | ApplicationEvent + ApplicationListener / @EventListener | Spring 事件机制,发布-订阅模型 |
| 策略模式 | Resource 接口(ClassPathResource/UrlResource等) | 根据不同前缀自动选择资源加载策略 |
| 适配器模式 | HandlerAdapter(Spring MVC) | 不同类型的 Controller(注解式、实现接口式)通过适配器统一调用 |
| 装饰器模式 | HttpServletRequestWrapper | 对原始 Request 进行包装增强 |
| 责任链模式 | Spring Security 过滤器链 | 多个 Filter 按顺序处理请求,每个 Filter 决定是否放行 |
| 建造者模式 | BeanDefinitionBuilder、UriComponentsBuilder | 链式构建复杂对象 |
面试时重点讲 3-4 个: 工厂(BeanFactory)、代理(AOP)、模板方法(JdbcTemplate)、观察者(Event),每个都能展开一两句说清楚。
二、创建型模式
追问与易错
追问方向:
- 策略模式体现在哪?
- 为什么说 Spring 是设计模式典范?
- DispatcherServlet 用了哪些模式?
易错点:
- ❌ 只知道单例和工厂——至少说出 5-6 种
- ❌ 设计模式是理论不用学——Spring 源码处处是
💡 记忆锚点
Spring是一座设计模式博物馆:BeanFactory是工厂车间,Bean默认单例是独生子女政策,AOP代理是明星经纪人,JdbcTemplate是填空卷模板,Event是广播站,Filter链是机场安检流水线。面试讲3-4个即可镇场。