Interceptor serie Mybatis VII
El interceptor Mybatis utiliza el patrón de cadena de responsabilidad. Aquí hablamos brevemente sobre el concepto de modelo de cadena de responsabilidad. Si quieres saber más, puedes ir a Baidu o Google para buscar cadena de responsabilidad.
Patrón de cadena de responsabilidad: permite que múltiples objetos tengan la oportunidad de manejar solicitudes, evitando así el acoplamiento entre el remitente y el receptor de la solicitud. Encadene estos objetos en una cadena y pase la solicitud a lo largo de la cadena hasta que un objeto maneje la solicitud.
Antes de comprender el interceptor de Mybatis, primero veamos un pequeño ejemplo, que se utiliza para desbloquear la interfaz del Ejecutor Listlt; ejecutado, se enviará una cadena "Método interceptado en BaseExecutor de mybatis".
Después de configurar el interceptor, puede ver que se envían dos autointerceptores a la consola. Veamos cómo Mybatis implementa interceptores.
Ejemplo de interceptor personalizado CustomInterceptor implementa la interfaz de interceptor definida por Mybatis. Echemos un vistazo a su definición.
Mire la definición anterior. Consta principalmente de 3 partes. Una parte es la configuración del atributo del interceptor (este paso) y la otra parte es la lógica empresarial específica que se implementará al registrarse.
Veamos dónde se utiliza el método plugin(). Descubrimos que solo el método pluginAll() en la cadena InterceptorChain llamó a este método. Eche un vistazo a la implementación de este método, que utiliza un interceptor para encapsular el objetivo entrante en una capa y devuelve el objeto encapsulado.
Echemos un vistazo a dónde se debe llamar a pluginAll() en InterceptorChain. En otras palabras, ¿dónde admite Mybatis agregar interceptores? Bien, vemos que se crean instancias de ParameterHandler y ResultSetHandler en la ayuda para la creación de configuración. Las clases ResultSetHandler, StatementHandler y Executor en la configuración admiten interceptores.
Ahora que entendemos la cadena de llamadas, echemos un vistazo a cómo implementar el método del complemento. De hecho, Mybatis proporciona un complemento de clase de herramienta para ayudarnos a implementarlo de manera simple.
Luego, con la ayuda del método wrap() de la clase Plugin, veamos la implementación del método plugin() en nuestro ejemplo. El principio de implementación también es relativamente simple. Primero, analizamos qué método en qué clase necesitamos interceptar en función de la configuración de nuestra anotación de interceptor personalizada y luego generamos un objeto proxy en el parámetro de destino para devolver.
Podemos ver que el proxy es new Plugin(target, interceptor, SignatureMap)); Puede ver que el método interceptor del interceptor personalizado se llama en el método de invocación.
En este punto, la implementación del interceptor Mybatis ha llegado a su fin. Los amigos que tengan alguna pregunta pueden comunicarse.