Cómo utilizar el DebugInterceptor de Spring.


Fecha de publicación:19 de enero de 2021.



INFOMARTION > Cómo utilizar el DebugInterceptor de Spring.

Resumen.

Se trata de cómo utilizar el DebugInterceptor de Spring. La siguiente página web de Spring me ayudó a entender el concepto, pero fue difícil entender qué hacer exactamente sólo con la página web, así que verifiqué los resultados.

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api

Índice de contenidos

  1. ¿Qué es un DebugInterceptor?
  2. montaje
  3. resumen

1. ¿Qué es un DebugInterceptor?

DebugInterceptor es una librería que emite registros por AOP. En concreto, las siguientes bibliotecas (archivos jar). Versión 5.1.4.

https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE

El archivo Java específico es "org.springframework.aop.interceptor.DebugInterceptor".

Brevemente, AOP es una técnica para inyectar procesamiento en instancias gestionadas en el contenedor DI de Spring. El nombre oficial de AOP es Aspect Oriented Programming.

En este caso, queremos inyectar un DebugInterceptor en la instancia que está siendo generada por @Component.

1-1. entorno de aplicación

Me gustaría describir el tarro y la versión utilizada, ya que puede haber ligeras diferencias según el entorno.

Versión de aop de primaveraspring-aop-5.1.4.RELEASE.jar
Versión de las judías de primaveraspring-beans-5.1.4.RELEASE.jar
Versión de la biblioteca de salida de registrosslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Trabajo requerido.

El trabajo requerido es el siguiente.

  • Crear una instancia con @Componente.
  • Definir AOP en applicationContext.xml
  • Cambiar la configuración de la salida del registro

2. montaje

Ahora me gustaría ponerlo en práctica.

2-1. Crear una instancia con @Componente.

Prepara una clase con "@Componente" declarada como sigue. Sólo ejecute 'return' ya que sólo quiere ver el AOP.

TestAop.java


@Component
public class TestAop{
    public void testMethod() {

        return;

    }

}

2-2. Definir AOP en applicationContext.xml

Configurar el AOP para inyectar el proceso. Las zonas rojas son las relevantes para el POA.

applicationContext.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
~abreviatura~
    <!-- Pruebas de AOP en primavera. -->
    <bean id="debugInterceptor" class="org.springframework.aop.interceptor.DebugInterceptor" />
    <aop:config>
        <aop:advisor advice-ref="debugInterceptor"
            pointcut="execution(* com.example.TestAop.testMethod(..))"  />
    </aop:config>
</beans>

'pointcut' se escribe de la siguiente manera.

pointcut="execution(* nombre del paquete.nombre de la clase.nombre del método(..))"

En el ejemplo anterior, sería como sigue.

・nombre del paquete:com.example

・nombre de la clase:TestAop

・nombre del método:testMethod

Si quieres aplicarlo a todos los métodos, se aplica lo siguiente.

・pointcut="execution(* com.example.TestAop.*(..))"

2-3. Cambiar la configuración de la salida del registro

Cambie el nivel de registro sólo para DebugInterceptor, ya que el nivel de salida de registro descrito en DebugInterceptor es "TRACE". Las áreas en rojo son las que hay que fijar. El resto de los ajustes se pueden introducir de forma arbitraria.

logback.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern><![CDATA[date:%d{yyyy-MM-dd HH:mm:ss}\tthread:%thread\tX-Track:%X{X-Track}\tlevel:%-5level\tlogger:%-48logger{48}\tmessage:%msg%n]]></pattern>
        </encoder>
    </appender>

    <appender name="APPLICATION_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${app.log.dir:-log}/todo-application.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${app.log.dir:-log}/todo-application-%d{yyyyMMdd}.log</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder>
            <charset>UTF-8</charset>
            <pattern><![CDATA[date:%d{yyyy-MM-dd HH:mm:ss}\tthread:%thread\tX-Track:%X{X-Track}\tlevel:%-5level\tlogger:%-48logger{48}\tmessage:%msg%n]]></pattern>
        </encoder>
    </appender>

    <logger name="org.springframework.aop.interceptor" level="trace">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="APPLICATION_LOG_FILE" />
    </logger>

    <root level="warn">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="APPLICATION_LOG_FILE" />
    </root>

</configuration>

He mirado en los blogs de otras personas al crearlo, y algunos indicaban que la salida debía ser a nivel de log DEBUG, pero en el caso de 'spring-aop-5.1.4.RELEASE.jar' parece que la salida no se produce a menos que sea a nivel de log TRACE.

Si la configuración debería estar funcionando, pero por alguna razón los registros no están siendo emitidos, intente cambiar el nivel de registro a TRACE.

2-4. Resultado.

Si llama a testMethod en TestAop.java con la configuración anterior completada, debería salir el siguiente registro. El registro es largo, así que he borrado algunas líneas, pero debería salir dos líneas cada una para Entrar y Salir, para un total de cuatro líneas.

date:2021-01-18 15:26:35	thread:http-nio-8081-exec-3	X-Track:84b8ab0aa6504352a815ce85167a1981	level:TRACE	logger:o.s.aop.interceptor.DebugInterceptor	message:Entering ReflectiveMethodInvocation 
date:2021-01-18 15:26:35	thread:http-nio-8081-exec-3	X-Track:84b8ab0aa6504352a815ce85167a1981	level:TRACE	logger:o.s.aop.interceptor.DebugInterceptor	message:Entering ReflectiveMethodInvocation 
date:2021-01-18 15:26:40	thread:http-nio-8081-exec-3	X-Track:84b8ab0aa6504352a815ce85167a1981	level:TRACE	logger:o.s.aop.interceptor.DebugInterceptor	message:Exiting ReflectiveMethodInvocation 
date:2021-01-18 15:26:40	thread:http-nio-8081-exec-3	X-Track:84b8ab0aa6504352a815ce85167a1981	level:TRACE	logger:o.s.aop.interceptor.DebugInterceptor	message:Exiting ReflectiveMethodInvocation 

3. resumen

Si no está familiarizado con el uso del DebugInterceptor, remítase a él.

Gracias por mirar hasta el final.