Hoe gebruik je Spring's DebugInterceptor.
Datum van publicatie:19 januari 2021.
INFOMARTION > Hoe gebruik je Spring's DebugInterceptor.
Overzicht.
Dit gaat over hoe je Spring's DebugInterceptor kunt gebruiken. De volgende website van Spring hielp me het concept te begrijpen, maar het was moeilijk te begrijpen wat ik precies moest doen van de website alleen, dus heb ik de resultaten zelf geverifieerd.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Inhoudsopgave
1. Wat is een DebugInterceptor?
DebugInterceptor is een bibliotheek die logs uitvoert via AOP. Meer bepaald, de volgende bibliotheken (jar files). Versie 5.1.4.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
Het specifieke Java-bestand is "org.springframework.aop.interceptor.DebugInterceptor".
Kort gezegd is AOP een techniek om verwerking te injecteren in instanties die worden beheerd op de DI container van Spring. De officiële naam voor AOP is Aspect-georiënteerd programmeren.
In dit geval willen we een DebugInterceptor injecteren in de instantie die wordt gegenereerd door @Component.
1-1. implementatieomgeving
Ik zou graag de gebruikte Jar en versie beschrijven, aangezien er kleine verschillen kunnen zijn afhankelijk van de omgeving.
Versie van lente aop | spring-aop-5.1.4.RELEASE.jar |
---|---|
Versie van lentebonen | spring-beans-5.1.4.RELEASE.jar |
Versie van logboekuitvoerbibliotheek | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Werk vereist.
Het vereiste werk is als volgt.
- Maak een instantie met @Component.
- Definieer AOP in applicationContext.xml
- Veranderen van log output instellingen
2. montage
Nu zou ik het in de praktijk willen brengen.
2-1. Maak een instantie met @Component.
Maak een klasse met "@Component" als volgt gedeclareerd. Voer alleen "return" uit, want je wilt alleen de AOP zien.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Definieer AOP in applicationContext.xml
Zet de AOP op om het proces te injecteren. De rode gebieden zijn die welke relevant zijn voor het AOP.
<?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">
~verkorting~
<!-- Spring AOP testen. -->
<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" wordt als volgt geschreven.
pointcut="execution(* pakketnaam.klassenaam.methode-naam(..))"
In het bovenstaande voorbeeld zou het als volgt zijn.
・pakketnaam:com.example
・klassenaam:TestAop
・methode-naam:testMethod
Als u het op alle methoden wilt toepassen, geldt het volgende.
・pointcut="execution(* com.example.TestAop.*(..))"
2-3. Veranderen van log output instellingen
Wijzig het logging-niveau alleen voor DebugInterceptor, aangezien het niveau van de log-uitvoer beschreven in DebugInterceptor "TRACE" is. De gebieden in het rood zijn die welke moeten worden ingesteld. De rest van de instellingen kan willekeurig worden ingevoerd.
<?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>
Ik keek naar een aantal blogs van andere mensen bij het maken ervan, en sommigen stelden dat de output op log level DEBUG moet worden uitgevoerd, maar in het geval van 'spring-aop-5.1.4.RELEASE.jar' lijkt het erop dat de output niet wordt uitgevoerd, tenzij het op log level TRACE is.
Als de configuratie zou moeten werken, maar om een of andere reden de logs niet worden uitgevoerd, probeer dan het log-niveau te veranderen in TRACE.
2-4. Resultaat.
Als u testMethod in TestAop.java aanroept met de bovenstaande instellingen voltooid, zou het volgende log moeten worden uitgevoerd. Het log is lang, dus heb ik een paar regels verwijderd, maar het zou twee regels elk voor Entering en Exiting moeten uitvoeren, voor een totaal van vier regels.
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. samenvatting
Als u niet bekend bent met het gebruik van de DebugInterceptor, raadpleeg deze dan.
Bedankt voor het kijken tot het einde.
■INFORMATION
Klik hier om naar de bovenste pagina van INFORMATIE te gaan.
■PROFILE
■Contactgegevens.
Voor vragen over het artikel kunt u hier contact met ons opnemen.