Wie man den DebugInterceptor von Spring verwendet.


Datum der Veröffentlichung:19. Januar 2021.



INFOMARTION > Wie man den DebugInterceptor von Spring verwendet.

Überblick.

Hier geht es darum, wie der DebugInterceptor von Spring verwendet wird. Die folgende Website von Spring half mir, das Konzept zu verstehen, aber es war schwierig, allein anhand der Website zu verstehen, was genau zu tun ist, also habe ich die Ergebnisse überprüft.

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

Das Inhaltsverzeichnis

  1. Was ist ein DebugInterceptor?
  2. Montage
  3. Zusammenfassung

1. Was ist ein DebugInterceptor?

DebugInterceptor ist eine Bibliothek, die Protokolle per AOP ausgibt. Insbesondere die folgenden Bibliotheken (jar-Dateien). Version 5.1.4.

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

Die spezifische Java-Datei ist "org.springframework.aop.interceptor.DebugInterceptor".

Kurz gesagt, AOP ist eine Technik zur Injektion von Verarbeitungsprozessen in Instanzen, die im DI-Container von Spring verwaltet werden. Die offizielle Bezeichnung für AOP ist Aspect Oriented Programming.

In diesem Fall wollen wir einen DebugInterceptor in die Instanz einfügen, die von @Component erzeugt wird.

1-1. Implementierungsumgebung

Ich möchte das verwendete Jar und die Version beschreiben, da es je nach Umgebung leichte Unterschiede geben kann.

Version von spring aopspring-aop-5.1.4.RELEASE.jar
Version von Frühlingsbohnenspring-beans-5.1.4.RELEASE.jar
Version der Bibliothek für die Protokollausgabeslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Erforderliche Arbeiten.

Der Arbeitsaufwand stellt sich wie folgt dar.

  • Erstellen Sie eine Instanz mit @Component.
  • Definieren Sie AOP in applicationContext.xml
  • Ändern der Einstellungen für die Protokollausgabe

2. Montage

Jetzt möchte ich es in die Praxis umsetzen.

2-1. Erstellen Sie eine Instanz mit @Component.

Bereiten Sie eine Klasse mit "@Component" vor, die wie folgt deklariert wird. Führen Sie nur 'return' aus, da Sie nur das AOP sehen wollen.

TestAop.java


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

        return;

    }

}

2-2. Definieren Sie AOP in applicationContext.xml

Richten Sie das AOP ein, um den Prozess zu injizieren. Die roten Bereiche sind diejenigen, die für das AOP relevant sind.

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">
~Verkürzung~
    <!-- Spring AOP-Tests. -->
    <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' wird wie folgt geschrieben.

pointcut="execution(* Paketname.Klassenname.Methoden-Name(..))"

Im obigen Beispiel würde dies folgendermaßen aussehen.

・Paketname:com.example

・Klassenname:TestAop

・Methoden-Name:testMethod

Wenn Sie sie auf alle Methoden anwenden wollen, gilt Folgendes.

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

2-3. Ändern der Einstellungen für die Protokollausgabe

Ändern Sie die Protokollierungsebene nur für DebugInterceptor, da die in DebugInterceptor beschriebene Ebene der Protokollausgabe "TRACE" ist. Die rot markierten Bereiche sind diejenigen, die festgelegt werden müssen. Der Rest der Einstellungen kann beliebig eingegeben werden.

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>

Ich habe mir bei der Erstellung einige Blogs anderer Leute angesehen, und in einigen stand, dass die Ausgabe auf der Protokollebene DEBUG erfolgen sollte, aber im Fall von "spring-aop-5.1.4.RELEASE.jar" scheint die Ausgabe nur auf der Protokollebene TRACE zu erfolgen.

Wenn die Konfiguration funktionieren sollte, die Protokolle aber aus irgendeinem Grund nicht ausgegeben werden, versuchen Sie, die Protokollebene auf TRACE zu ändern.

2-4. Ergebnis.

Wenn Sie testMethod in TestAop.java mit den oben genannten Einstellungen aufrufen, sollte das folgende Protokoll ausgegeben werden. Da das Protokoll sehr lang ist, habe ich ein paar Zeilen gelöscht, aber es sollten jeweils zwei Zeilen für "Entering" und "Exiting" ausgegeben werden, also insgesamt vier Zeilen.

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

Wenn Sie mit der Verwendung des DebugInterceptors nicht vertraut sind, lesen Sie bitte die entsprechende Anleitung.

Danke, dass Sie bis zum Ende zugesehen haben.