← 每日面试题 学习看板

Spring中用到了哪些设计模式

面试题/00java/04 框架/01Spring/08扩展与最佳实践/Spring中用到了哪些设计模式.md

面试记录 2026-09-28

题目:Spring中用到了哪些设计模式

难度:difficulty/high

标签:spring/practice, general/knowledge, difficulty/high

评分:⭐⭐⭐☆☆(3/5)

我的回答

Spring 中最常规的首先是代理,它的大部分功能都是基于代理的实现的,AOP。另外就是工厂,工厂方法,它的创建对象都是基于工厂方法去实现的。再之后是单例模式,它的管理 bean 的模式大部分是单例的。还有就是享元模式。再有就是模板模式,它的很多功能是模板化的,比如 Resent Template Latter,JDBC Template Latter 都是模板方法性质的。然后是策略模式,其他的暂时想不起来了。

点评

优点:

不足:

补充(Spring 设计模式分类表):

类别模式Spring 实现
创建型单例模式Bean 默认 singleton 作用域
工厂方法BeanFactory.getBean() / FactoryBean.getObject()
抽象工厂BeanFactory 本身
建造者@Configuration 类中 @Bean 方法
结构型代理模式AOP、JDK 动态代理、CGLIB 代理
装饰器代理增强、HttpServletRequestWrapper
适配器AbstractCachingErrorHandler、HandlerMethodReturnValueHandler
外观模式RestTemplate / JdbcTemplate
行为型模板方法JdbcTemplate.execute()、RestTemplate.exchange()
观察者ApplicationEvent / @EventListener
策略PlatformTransactionManager 多实现、ResourceLoader 多实现
责任链HandlerInterceptor、FilterChain
中介者ApplicationContext
状态模式TransactionSynchronizationManager

关键区分点:

  1. 代理 vs 装饰器:代理是控制访问(AOP),装饰器是动态添加功能
  2. 工厂 vs 建造者:工厂一次性创建,建造者分步构建复杂对象
  3. Spring 单例 vs GoF 单例:Spring 是容器级单例(可多容器),GoF 是全局唯一

完整讲解

第一部分:知识重点剖析

核心考点定位:考察对 Spring 源码架构的理解深度,以及能否把设计模式与 Spring 的实际实现一一对应。

知识点拆解:

  1. 创建型模式:
  1. 结构型模式:
  1. 行为型模式:
  1. 几个容易搞混的对比:
  1. 享元模式的常见误用(本题失分点):

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. Spring 的三级缓存用了什么设计模式?如果不用工厂模式(ObjectFactory)会怎样?
  1. Spring 里有哪些地方用到了责任链?如果让你自定义一条拦截链怎么做?
  1. Spring 的观察者模式如何结合事务使用?@TransactionalEventListener 的 phase 有哪些?

第三部分:面试者参考回答(300-600 字口语化)

面试官您好,Spring 是设计模式的集大成者,我按创建型、结构型、行为型三大类来讲。

创建型模式:

结构型模式:

行为型模式:

几个容易搞混的对比:

关于享元模式的一个澄清:享元模式是共享细粒度对象以减少内存开销(如 Integer 缓存、字符串常量池),Spring 中并没有明显的享元模式实现,容易和"单例"混淆。

实际工程借鉴:我在写业务代码时会借鉴 Spring 的设计思路——比如用模板方法把"参数校验-业务执行-后置日志"的重复代码抽象成 Template;用观察者模式通过 Spring 事件解耦业务模块(订单支付完成后触发积分、通知、库存回滚);用工厂模式把复杂的 Bean 构建封装在 @Configuration 类里。


面试记录 2026-10-11

题目:Spring中用到了哪些设计模式

难度:difficulty/high

标签:spring/practice, difficulty/high

评分:⭐⭐⭐☆☆(3/5)

我的回答

Spring 中用到很多设计模式,最核心的首先是代理模式,它的很多依赖的基础都是代理,IOC 都是基于代理模式去实现的。然后是模板方法,比如,Rest Template,JDBC Template,这都是基于模板方法去实现。然后是责任链设计模式,有单例模式、享元模式,策略模式,工厂模式等;

点评

优点:

不足:

补充:

完整讲解

第一部分:知识重点剖析

核心考点定位:考察对 Spring 源码架构的理解深度,以及能否把设计模式与 Spring 的实际实现一一对应。

知识点拆解:

  1. 创建型模式:
  1. 结构型模式:
  1. 行为型模式:
  1. 几个容易搞混的对比:
  1. 享元模式的常见误用(本题失分点):

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. Spring 的三级缓存用了什么设计模式?如果不用工厂模式(ObjectFactory)会怎样?
  1. Spring 里有哪些地方用到了责任链?如果让你自定义一条拦截链怎么做?
  1. Spring 的观察者模式如何结合事务使用?@TransactionalEventListener 的 phase 有哪些?

第三部分:面试者参考回答(300-600 字口语化)

面试官您好,Spring 是设计模式的集大成者,我按创建型、结构型、行为型三大类来讲。

创建型模式:

结构型模式:

行为型模式:

几个容易搞混的对比:

关于享元模式的一个澄清:享元模式是共享细粒度对象以减少内存开销(如 Integer 缓存、字符串常量池),Spring 中并没有明显的享元模式实现,容易和"单例"混淆。

实际工程借鉴:我在写业务代码时会借鉴 Spring 的设计思路——比如用模板方法把"参数校验 - 业务执行 - 后置日志"的重复代码抽象成 Template;用观察者模式通过 Spring 事件解耦业务模块(订单支付完成后触发积分、通知、库存回滚);用工厂模式把复杂的 Bean 构建封装在 @Configuration 类里。