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 中的 BeanFactory 和 ApplicationContext 实现了策略模式。在不同的情况下,可以使用不同的 Bean 创建策略。
  • 事务管理中,Spring 也使用策略模式来决定不同的事务管理器,比如 DataSourceTransactionManager 和 JtaTransactionManager。
  • 通过 @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 的 BeanFactory 和 ApplicationContext 都实现了工厂模式,用于创建和管理 Bean 的实例。

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

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

3. 观察者模式(Observer Pattern)

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

4. 装饰器模式(Decorator Pattern)

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

总结

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

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

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

相关推荐
java资料站18 分钟前
五、Spring AI Alibaba · Memory · Saver(短期会话)
java·spring·microsoft
染指11102 小时前
140.Agent-多Agent框架-Agent执行Skills流程
数据库·人工智能·设计模式·langchain·agents
bst@微胖子5 小时前
Spring AI (5) : MCP 深度实战:从工具抽取到鉴权,SSE 与 STDIO
人工智能·spring·dubbo
Nebula_g6 小时前
JavaSE拓展:工具类Executors
java·开发语言·后端·spring·基础·javase
鱼宵6 小时前
Spring AI 可观测与透明化:traceId 串起全链路,思考过程实时直播给用户
java·人工智能·spring·链路追踪·springai
Raas1006 小时前
AI网关能做语义缓存吗?MAI Gateway(魔芋企业级AI网关)实战能力深度解读
java·后端·spring
天空鸟_时光不老6 小时前
13-亮点提炼:把技术说辞翻译成业务价值
java·spring boot·spring·spring cloud·mybatis
程序员Sunday7 小时前
Spring @Transactional 没回滚?按代理调用、异常和传播行为排查
java·后端·spring
sarasuki7 小时前
Agent 是怎么做错误处理的呢?
人工智能·设计模式·agent
java资料站7 小时前
案例:Spring Ai/Alibaba《模拟面试器》项目案例
人工智能·spring·面试