面试题:你了解的 Spring 都用到哪些设计模式?

Spring 框架是一个高度模块化、设计精良的框架,其中大量使用了设计模式来解决复杂问题。以下是一些在 Spring 中常见的设计模式及其应用场景:


1. 单例模式(Singleton)

  • 应用场景:Spring 容器中的 Bean 默认是单例的,即在整个 Spring 上下文中,一个 Bean 只有一个实例。
  • 优点:节省资源,提高性能。
  • 示例@Bean 或 XML 配置中的 Bean 默认是单例的。

2. 工厂模式(Factory Pattern)

  • 应用场景:Spring 使用 BeanFactoryApplicationContext 来创建和管理 Bean 实例。
  • 优点:将对象的创建与使用分离,降低耦合。
  • 示例ApplicationContext 是一个高级工厂,负责创建和管理 Bean。

3. 代理模式(Proxy Pattern)

  • 应用场景:Spring AOP(面向切面编程)使用动态代理来实现横切关注点(如事务管理、日志记录等)。
  • 优点:在不修改原始类的情况下增强功能。
  • 示例:JDK 动态代理和 CGLIB 代理。

4. 模板方法模式(Template Method Pattern)

  • 应用场景:Spring 提供了许多模板类,如 JdbcTemplateRestTemplate 等,定义了算法的骨架,具体步骤由子类实现。
  • 优点:减少重复代码,提高代码复用性。
  • 示例JdbcTemplate 封装了 JDBC 的常用操作,开发者只需关注 SQL 和结果处理。

5. 观察者模式(Observer Pattern)

  • 应用场景:Spring 的事件驱动模型使用观察者模式,例如 ApplicationEventApplicationListener
  • 优点:实现松耦合的事件处理机制。
  • 示例:自定义事件发布和监听。

6. 适配器模式(Adapter Pattern)

  • 应用场景:Spring MVC 中的 HandlerAdapter 用于适配不同类型的处理器(如 Controller)。
  • 优点:使不兼容的接口能够协同工作。
  • 示例RequestMappingHandlerAdapter 适配基于注解的控制器。

7. 装饰器模式(Decorator Pattern)

  • 应用场景:Spring 中的 BeanPostProcessor 可以在 Bean 初始化前后对其进行增强。
  • 优点:动态扩展对象的功能。
  • 示例:AOP 中的增强逻辑就是通过装饰器模式实现的。

8. 策略模式(Strategy Pattern)

  • 应用场景:Spring 中的资源加载器 ResourceLoader 根据不同的资源类型选择不同的加载策略。
  • 优点:将算法与客户端解耦,灵活切换策略。
  • 示例ClassPathResourceFileSystemResource 等。

9. 依赖注入模式(Dependency Injection)

  • 应用场景:Spring 的核心特性之一,通过构造函数、Setter 方法或字段注入依赖。
  • 优点:降低组件之间的耦合,提高可测试性。
  • 示例@Autowired 注解实现自动注入。

10. 建造者模式(Builder Pattern)

  • 应用场景:Spring 中的 BeanDefinitionBuilder 用于构建复杂的 Bean 定义。
  • 优点:分离对象的构建与表示,支持逐步构建。
  • 示例BeanDefinitionBuilder 构建 Bean 定义。

11. 原型模式(Prototype Pattern)

  • 应用场景:Spring 中的 Bean 可以配置为原型作用域,每次请求都会创建一个新的实例。
  • 优点:适用于需要频繁创建和销毁对象的场景。
  • 示例@Scope("prototype") 注解。

12. 责任链模式(Chain of Responsibility Pattern)

  • 应用场景:Spring Security 中的过滤器链(Filter Chain)就是责任链模式的典型应用。
  • 优点:将请求的发送者和处理者解耦。
  • 示例FilterChainProxy 处理多个安全过滤器。

总结

Spring 框架中广泛使用了多种设计模式,这些模式帮助 Spring 实现了高内聚、低耦合的设计目标。常见的设计模式包括:

  • 单例模式:Bean 的默认作用域。
  • 工厂模式:Bean 的创建和管理。
  • 代理模式:AOP 的实现。
  • 模板方法模式JdbcTemplate 等模板类。
  • 依赖注入:Spring 的核心特性。

理解这些设计模式有助于更好地掌握 Spring 的设计思想,并在实际开发中灵活运用。

THE END
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容