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 ?
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 aop | spring-aop-5.1.4.RELEASE.jar |
---|---|
Version des haricots de printemps | spring-beans-5.1.4.RELEASE.jar |
Version de la bibliothèque de sortie des journaux | slf4j-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.
@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.
<?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.
<?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.
■INFORMATION
Veuillez cliquer ici pour accéder à la page d'accueil d'INFORMATION.
■PROFILE
Veuillez cliquer ici pour un profil.
■Coordonnées de contact.
Pour toute question concernant cet article, veuillez nous contacter ici.