Spring 框架中都用到了哪些设计模式:单例模式、策略模式、代理模式

Spring 框架是一个功能强大的企业级应用开发框架,它使用了多种设计模式来提高代码的可维护性、可扩展性和可重用性。以下是 Spring 框架中常见的几个设计模式,并简要说明它们的应用场景:

1. 单例模式(Singleton Pattern)

定义:确保一个类只有一个实例,并提供全局访问点。

Spring 中的应用

  • Spring 默认情况下,Bean 是单例的。即,在 Spring 容器中,每个定义的 Bean 只有一个实例,所有对该 Bean 的请求都返回同一个实例。
  • 可以通过 @Scope("singleton") 注解来显式指定一个 Bean 为单例。

示例

复制代码

java复制代码

@Component @Scope("singleton") public class SingletonBean { // 单例 Bean }

2. 策略模式(Strategy Pattern)

定义:定义一系列算法,把它们一个个封装起来,并且使它们可以互相替换。本模式使得算法可独立于使用它的客户而变化。

Spring 中的应用

  • Spring 中的 BeanFactoryApplicationContext 实现了策略模式。在不同的情况下,可以使用不同的 Bean 创建策略。
  • 事务管理中,Spring 也使用策略模式来决定不同的事务管理器,比如 DataSourceTransactionManagerJtaTransactionManager
  • 通过 @Qualifier 注解,可以选择具体的实现策略。

示例

复制代码

java复制代码

public interface PaymentStrategy { void pay(int amount); } @Component @Qualifier("creditCard") public class CreditCardPayment implements PaymentStrategy { public void pay(int amount) { // 信用卡支付逻辑 } } @Component @Qualifier("paypal") public class PayPalPayment implements PaymentStrategy { public void pay(int amount) { // PayPal支付逻辑 } } @Service public class PaymentService { private final PaymentStrategy paymentStrategy; @Autowired public PaymentService(@Qualifier("creditCard") PaymentStrategy paymentStrategy) { this.paymentStrategy = paymentStrategy; } public void processPayment(int amount) { paymentStrategy.pay(amount); } }

3. 代理模式(Proxy Pattern)

定义:为其他对象提供一种代理以控制对这个对象的访问。

Spring 中的应用

  • Spring AOP(面向切面编程)使用了代理模式来实现方法的拦截和增强。可以通过 JDK 动态代理或 CGLIB 代理来创建代理对象。
  • 事务管理也是通过代理模式实现的。Spring 在事务方法之前和之后插入事务处理逻辑。

示例

复制代码

java复制代码

@Aspect @Component public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint) { System.out.println("Executing method: " + joinPoint.getSignature().getName()); } } @Service public class SomeService { public void someMethod() { // 方法逻辑 } } // 配置类 @Configuration @EnableAspectJAutoProxy public class AppConfig { // 配置类内容 }

其他常见设计模式

除了上述三种设计模式,Spring 框架还使用了其他一些设计模式:

1. 工厂模式(Factory Pattern)

定义 :定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。 Spring 中的应用 :Spring 的 BeanFactoryApplicationContext 都实现了工厂模式,用于创建和管理 Bean 的实例。

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

定义 :定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 Spring 中的应用 :Spring 的 JdbcTemplateRestTemplateJpaTemplate 等都使用了模板方法模式,简化了数据库和 RESTful 服务的操作。

3. 观察者模式(Observer Pattern)

定义 :定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。 Spring 中的应用 :Spring 的事件机制使用了观察者模式,例如 ApplicationEventApplicationListener

4. 装饰器模式(Decorator Pattern)

定义 :动态地给一个对象添加一些额外的职责。就扩展功能来说,装饰模式比生成子类更为灵活。 Spring 中的应用 :Spring 的 BeanWrapperBeanPostProcessorHandlerInterceptor 等都使用了装饰器模式。

总结

Spring 框架使用了多种设计模式来提高其灵活性和可扩展性,其中包括但不限于:

  1. 单例模式:用于默认的 Bean 作用域,实现单例。
  2. 策略模式:用于不同的 Bean 创建策略、事务管理策略等。
  3. 代理模式:用于 AOP、事务管理等,通过代理对象实现方法拦截和增强���
  4. 工厂模式 :用于 BeanFactoryApplicationContext 创建和管理 Bean 实例。
  5. 模板方法模式 :用于 JdbcTemplateRestTemplate 等,简化常见操作。
  6. 观察者模式:用于 Spring 事件机制,实现事件发布和监听。
  7. 装饰器模式 :用于 BeanWrapperBeanPostProcessor 等,实现功能的动态扩展。

理解这些设计模式在 Spring 中的应用有助于更好地掌握 Spring 框架的核心原理,提高开发效率和代码质量。

相关推荐
哪 吒3 小时前
最简单的设计模式,抽象工厂模式,是否属于过度设计?
设计模式·抽象工厂模式
Theodore_10223 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸4 小时前
01-spring security认证笔记
java·笔记·spring
没书读了5 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
转世成为计算机大神6 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
小乖兽技术7 小时前
23种设计模式速记法
设计模式
代码小鑫8 小时前
A043-基于Spring Boot的秒杀系统设计与实现
java·开发语言·数据库·spring boot·后端·spring·毕业设计
真心喜欢你吖8 小时前
SpringBoot与MongoDB深度整合及应用案例
java·spring boot·后端·mongodb·spring
小白不太白9509 小时前
设计模式之 外观模式
microsoft·设计模式·外观模式
小白不太白9509 小时前
设计模式之 原型模式
设计模式·原型模式