Comment utiliser le DebugInterceptor de Spring.


Date de publication:19 janvier 2021.



INFOMARTION > Comment utiliser le DebugInterceptor de Spring.

Vue d'ensemble.

Cet article explique comment utiliser le DebugInterceptor de Spring. Le site Web suivant sur le printemps m'a aidé à comprendre le concept, mais il était difficile de comprendre ce qu'il fallait faire exactement à partir du site Web seul, alors j'ai vérifié les résultats.

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

Table des matières

  1. Qu'est-ce qu'un DebugInterceptor ?
  2. montage
  3. résumé

1. Qu'est-ce qu'un DebugInterceptor ?

DebugInterceptor est une bibliothèque qui produit des logs par AOP. Plus précisément, les bibliothèques suivantes (fichiers jar). Version 5.1.4.

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

Le fichier Java spécifique est "org.springframework.aop.interceptor.DebugInterceptor".

En bref, la POA est une technique permettant d'injecter des traitements dans les instances gérées par le conteneur DI de Spring. Le nom officiel de la POA est Programmation Orientée Aspect.

Dans ce cas, nous voulons injecter un DebugInterceptor dans l'instance qui est générée par @Component.

1-1. environnement de mise en oeuvre

Je voudrais décrire le Jar et la version utilisés, car il peut y avoir de légères différences selon l'environnement.

Version de spring aopspring-aop-5.1.4.RELEASE.jar
Version des haricots de printempsspring-beans-5.1.4.RELEASE.jar
Version de la bibliothèque de sortie des journauxslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Travail requis.

Les travaux requis sont les suivants.

  • Créez une instance avec @Component.
  • Définir AOP dans applicationContext.xml
  • Modification des paramètres de sortie du journal

2. montage

Je voudrais maintenant le mettre en pratique.

2-1. Créez une instance avec @Component.

Préparez une classe avec "@Component" déclarée comme suit. N'exécutez que 'return' car vous ne voulez voir que l'AOP.

TestAop.java


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

        return;

    }

}

2-2. Définir AOP dans applicationContext.xml

Configurer l'AOP pour injecter le processus. Les zones en rouge sont celles qui sont pertinentes pour le 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">
~abrégé~
    <!-- Tests de Spring AOP. -->
    <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>

Le terme "pointcut" s'écrit comme suit.

pointcut="execution(* nom du paquet.nom de la classe.nom de la méthode(..))"

Dans l'exemple ci-dessus, ce serait comme suit.

・nom du paquet:com.example

・nom de la classe:TestAop

・nom de la méthode:testMethod

Si vous souhaitez l'appliquer à toutes les méthodes, la règle suivante s'applique.

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

2-3. Modification des paramètres de sortie du journal

Changez le niveau de journalisation uniquement pour DebugInterceptor, car le niveau de sortie du journal décrit dans DebugInterceptor est "TRACE". Les zones en rouge sont celles qui doivent être définies. Le reste des paramètres peut être saisi de manière arbitraire.

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>

J'ai consulté les blogs d'autres personnes lors de la création de ce fichier, et certains ont indiqué que la sortie devait se faire au niveau du journal DEBUG, mais dans le cas de 'spring-aop-5.1.4.RELEASE.jar', il semble que la sortie ne se fasse que si elle est au niveau du journal TRACE.

Si la configuration devrait fonctionner, mais que pour une raison quelconque les journaux ne sont pas émis, essayez de changer le niveau du journal en TRACE.

2-4. Résultat.

Si vous appelez testMethod dans TestAop.java avec les paramètres ci-dessus complétés, le journal suivant devrait s'afficher. Le journal est long, j'ai donc supprimé quelques lignes, mais il devrait sortir deux lignes chacune pour l'entrée et la sortie, pour un total de quatre lignes.

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. résumé

Si vous n'êtes pas familiarisé avec l'utilisation du DebugInterceptor, veuillez vous y référer.

Merci d'avoir regardé jusqu'à la fin.