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?
  2. montage
  3. samenvatting

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 aopspring-aop-5.1.4.RELEASE.jar
Versie van lentebonenspring-beans-5.1.4.RELEASE.jar
Versie van logboekuitvoerbibliotheekslf4j-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.

TestAop.java


@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.

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">
~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.

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>

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.