Wie man den DebugInterceptor von Spring verwendet.


Datum der Veröffentlichung:

Aktualisiert:


Fachartikel > Wie man den DebugInterceptor von Spring verwendet.

Status 2026 und sichere Verwendung

Fazit: Der DebugInterceptor von Spring ist ein Proxy-basierter AOP-Interceptor, der ausführliche Methodenaufrufdetails auf TRACE-Ebene protokolliert. Es ist zum Debuggen gedacht und nicht als allgemeine Strategie zur Produktionsbeobachtbarkeit.

Was Sie lernen werden

  • Wie ein Berater Methoden auswählt und den Interceptor an geeignete Spring Beans anfügt.
  • Warum Selbstaufrufe und außerhalb des Spring-Containers erstellte Objekte den Proxy-Hinweis umgehen können.
  • So vermeiden Sie die Offenlegung von Argumenten, persönlichen Daten, Anmeldeinformationen oder übermäßigem Protokollvolumen.

Für wen ist dies gedacht: Spring-Entwickler, die eine XML-konfigurierte Anwendung pflegen oder klassisches Proxy-basiertes AOP erlernen.

Stand 2026: Die Klasse existiert noch in der aktuellen Spring Framework-Dokumentation, aber das Spring 5.1.4 XML-Beispiel unten ist historisch. Verwenden Sie eine unterstützte Spring-Linie, beschränken Sie die TRACE-Protokollierung auf kontrollierte Diagnosen und bevorzugen Sie aktuelle Metriken, Ablaufverfolgung und strukturierte Protokollierung für Produktionsvorgänge.

Sicherheitshinweis: Die Befehle und Konfigurationsbeispiele im Originalartikel wurden nicht in einer aktuellen Produktionsumgebung erneut ausgeführt. Überprüfen Sie unterstützte Versionen, Backups, Zugriffskontrollen und Rollback-Schritte in einer separaten Testumgebung, bevor Sie sie anwenden.

Offizielle Primärquellen

Ü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

Das verwendete JAR und seine Version sind unten aufgeführt, da sich das Verhalten je nach Umgebung unterscheiden 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

Im nächsten Schritt wird die Konfiguration umgesetzt.

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.