【12.MyBatis源码剖析与架构实战】MyBatis与设计模式-10. 责任链模式

📅 2026/7/12 22:16:36 👁️ 阅读次数 📝 编程学习
【12.MyBatis源码剖析与架构实战】MyBatis与设计模式-10. 责任链模式

MyBatis 与责任链模式(Chain of Responsibility Pattern)详解

责任链模式是一种行为型设计模式,它允许多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。在 MyBatis 中,插件(Interceptor)机制是责任链模式的典型应用:通过InterceptorChain将多个Interceptor串联起来,在核心对象(ExecutorStatementHandlerParameterHandlerResultSetHandler)的方法调用前后执行自定义逻辑,并且可以通过invocation.proceed()控制是否继续执行下一个插件或目标方法。


一、责任链模式概述

意图:使多个对象都有机会处理请求,避免请求的发送者与接收者之间的耦合关系。将这些对象串成一条链,并沿着链传递请求,直到有一个对象处理它为止。

参与者

  • Handler:定义处理请求的接口,通常持有对下一个处理者的引用。
  • ConcreteHandler:实现处理请求的方法,若能处理则处理,否则将请求转发给后继者。

在 MyBatis 中,每个Interceptor就是一个处理器,InterceptorChain维护处理器列表,并通过动态代理将处理器串联起来,形成调用链。调用链的执行顺序遵循**后进先出(LIFO)**原则。


二、MyBatis 中的责任链:插件机制

MyBatis 允许拦截四大核心接口的方法调用:

  • Executor(执行器)
  • StatementHandler(语句处理器)
  • ParameterHandler(参数处理器)
  • ResultSetHandler(结果集处理器)

通过实现Interceptor接口并使用@Intercepts注解声明拦截的目标方法,开发者可以编写插件。MyBatis 在初始化时将插件添加到InterceptorChain,在创建核心对象时,通过InterceptorChain.pluginAll(target)为目标对象生成多层代理对象,这些代理对象形成了一条责任链。

2.1 UML 类图