Hur man använder Spring's DebugInterceptor.


Datum för offentliggörande:19 januari 2021.



INFOMARTION > Hur man använder Spring's DebugInterceptor.

Översikt.

Det här handlar om hur man använder Spring's DebugInterceptor. Följande webbplats för våren hjälpte mig att förstå konceptet, men det var svårt att förstå exakt vad jag skulle göra enbart från webbplatsen, så jag kontrollerade faktiskt resultaten.

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

Innehållsförteckning

  1. Vad är en DebugInterceptor?
  2. montering
  3. sammanfattning

1. Vad är en DebugInterceptor?

DebugInterceptor är ett bibliotek som matar ut loggar med hjälp av AOP. Särskilt följande bibliotek (jar-filer). Version 5.1.4.

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

Den specifika Java-filen är "org.springframework.aop.interceptor.DebugInterceptor".

I korthet är AOP en teknik för att injicera bearbetning i instanser som hanteras i Spring DI-behållaren. Det officiella namnet på AOP är Aspect Oriented Programming.

I det här fallet vill vi injicera en DebugInterceptor i den instans som genereras av @Component.

1-1. miljö för genomförande.

Jag vill beskriva Jar och den version som används, eftersom det kan finnas små skillnader beroende på miljön.

Version av spring aopspring-aop-5.1.4.RELEASE.jar
Version av vårbönorspring-beans-5.1.4.RELEASE.jar
Version av biblioteket för loggutdataslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Arbete krävs.

Det arbete som krävs är följande.

  • Skapa en instans med @Component.
  • Definiera AOP i applicationContext.xml
  • Ändra inställningar för loggutgång

2. montering

Nu vill jag genomföra den i praktiken.

2-1. Skapa en instans med @Component.

Förbered en klass med "@Component" som deklareras på följande sätt. Kör bara "return" eftersom du bara vill se AOP:n.

TestAop.java


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

        return;

    }

}

2-2. Definiera AOP i applicationContext.xml

Skapa AOP för att injicera processen. De röda områdena är de områden som är relevanta för den årliga operativa planeringen.

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">
~förkortning~
    <!-- Testning av 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>

"pointcut" skrivs på följande sätt.

pointcut="execution(* paketets namn.klassens namn.Metodnamn(..))"

I exemplet ovan skulle det se ut på följande sätt.

・paketets namn:com.example

・klassens namn:TestAop

・Metodnamn:testMethod

Om du vill tillämpa den på alla metoder gäller följande.

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

2-3. Ändra inställningar för loggutgång

Ändra loggningsnivån endast för DebugInterceptor, eftersom den loggningsnivå som beskrivs i DebugInterceptor är "TRACE". Områden i rött är de som måste ställas in. Resten av inställningarna kan anges godtyckligt.

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>

Jag tittade på andras bloggar när jag skapade den, och i några av dem stod det att utdata bör ges ut på loggnivå DEBUG, men i fallet "spring-aop-5.1.4.RELEASE.jar" verkar det som om utdata inte ges ut om det inte är på loggnivå TRACE.

Om konfigurationen borde fungera, men loggarna av någon anledning inte visas, kan du försöka ändra loggnivån till TRACE.

2-4. Resultat.

Om du anropar testMethod i TestAop.java med ovanstående inställningar gjorda bör följande logg visas. Loggen är lång, så jag raderade några rader, men den bör ge ut två rader vardera för Ingång och Avslutning, för totalt fyra rader.

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

Om du inte är bekant med användningen av DebugInterceptor kan du läsa den.

Tack för att du tittade på till slutet.




■INFORMATION

Klicka här för att komma till den översta sidan med information.


■PROFILE

Klicka här för en profil.


■Kontaktuppgifter.

För frågor om artikeln, vänligen kontakta oss här.