1. 工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;
  2. 单例模式:Bean默认为单例模式。
  3. 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
  4. 模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
  5. 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener。

框架设计思想

Spring 框架在其设计和实现中广泛使用了多种设计模式,以提供强大的功能和灵活性。以下是一些在 Spring 框架中常见的设计模式:

  1. 控制反转(Inversion of Control,IoC):Spring 的核心原则之一是 IoC,它通过使用依赖注入(Dependency Injection,DI)来实现。IoC 将对象的创建和依赖关系的管理交给容器来处理,使得对象之间的解耦和配置的灵活性得以提高。
  2. 依赖注入(Dependency Injection,DI):DI 是实现 IoC 的一种方式,通过将对象的依赖关系注入到对象中,而不是由对象自己创建或查找依赖对象。Spring 使用 DI 来管理对象之间的依赖关系,以及实现松耦合和可测试性。
  3. 工厂模式(Factory Pattern):Spring 使用工厂模式来创建和管理对象。它使用工厂类或工厂方法来创建对象实例,隐藏了对象的创建细节,并提供了更灵活的对象创建和配置方式。
  4. 单例模式(Singleton Pattern):Spring 中的 Bean 默认是单例的,即每个 Bean 定义对应一个单独的实例。Spring 使用单例模式来管理 Bean 实例,确保在整个应用程序中只存在一个实例,并通过依赖注入将它们传递给需要的地方。
  5. 模板模式(Template Pattern):Spring 在多个模块中使用模板模式,例如 Spring JDBC 中的 JdbcTemplate、Spring JMS 中的 JmsTemplate。模板模式定义了一个操作的算法骨架,将一些步骤延迟到子类中实现,从而使得算法的结构稳定,但具体实现可以灵活变化。
  6. 观察者模式(Observer Pattern):Spring 使用观察者模式来实现事件驱动编程。它提供了事件发布和订阅的机制,允许对象监听和响应事件的发生,以实现松耦合的组件通信。
  7. 代理模式(Proxy Pattern):Spring AOP(面向切面编程)使用动态代理来在目标对象的方法执行前后插入额外的逻辑。Spring 使用 JDK 动态代理和 CGLIB 动态代理来实现代理对象的创建和管理。
  8. 装饰器模式(Decorator Pattern):Spring 中的装饰器模式用于增强对象的功能。通过使用装饰器模式,可以在不修改原始对象的情况下,动态地添加额外的功能或行为。

这些设计模式使得 Spring 框架具有灵活性、可扩展性和可维护性,并且能够更好地满足不同应用场景的需求。同时,它们也提供了良好的代码组织和架构的指导原则。