面试里可以从几个最核心、最好举例的模式答,不要一上来铺太多。
高频答案
- 工厂模式
Spring 通过 BeanFactory、ApplicationContext 管理 Bean 的创建。
你在用:
getBean("userService")
本质上就是把对象创建交给容器,而不是自己 new。
- 单例模式
Spring 默认 Bean 是 singleton,容器里通常同一个 Bean 只创建一个实例。
- 代理模式
Spring AOP 用得非常典型。
比如事务、日志、权限校验,很多都是通过代理在目标方法前后增强。
常见有:
-
JDK 动态代理
-
CGLIB 代理
- 模板方法模式
典型如:
-
JdbcTemplate
-
RedisTemplate
-
RestTemplate
它们把固定流程封装好,具体细节由回调或调用方补充。
- 观察者模式
Spring 事件机制就是观察者模式。
比如:
-
ApplicationEvent
-
ApplicationListener
一个事件发布后,多个监听器可以接收处理。
- 适配器模式
Spring MVC 里很典型。
比如不同类型的 Controller、Handler 最终都能被统一调用,背后就有适配器思想,例
如:
- HandlerAdapter
- 策略模式
Spring 里经常通过接口 + 多实现完成策略切换。
比如不同的:
-
HandlerMapping
-
HandlerAdapter
-
BeanPostProcessor
-
InstantiationStrategy
运行时按条件选择不同实现。
- 责任链模式
Spring MVC 的拦截器链、Spring Security 的过滤器链都很典型。
请求会按链路依次经过多个处理器。
如果面试官追问"最重要的三个"
你优先答这三个就够了:
-
工厂模式:Bean 的创建交给 Spring 容器
-
代理模式:AOP、事务
-
单例模式:默认 Bean 作用域
可以直接背的面试版
Spring 中常见的设计模式有:工厂模式、单例模式、代理模式、模板方法模式、观察者模
式、适配器模式、策略模式和责任链模式。最典型的是工厂模式用于 Bean 创建,代理模式
用于 AOP 和事务,单例模式体现在 Bean 默认 singleton。