Come usare DebugInterceptor in Spring


Data di pubblicazione:

Aggiornato:


Articoli > Come utilizzare il DebugInterceptor di Spring.

Aggiornamento 2026 e uso sicuro

In breve: DebugInterceptor è un interceptor AOP basato sui proxy di Spring. Registra le chiamate ai metodi a livello TRACE e va usato per diagnosi circoscritte, non come soluzione generale di osservabilità in produzione.

Cosa imparerai

  • Come un advisor seleziona i metodi e collega l'interceptor ai bean Spring interessati.
  • Perché l'autoinvocazione e gli oggetti creati fuori dal container Spring possono evitare il proxy.
  • Come evitare di esporre argomenti, dati personali, credenziali o volume di registro eccessivo.

Destinatari: sviluppatori Spring che mantengono un'applicazione configurata in XML o studiano il modello AOP basato su proxy.

Aggiornamento 2026: la classe è ancora documentata, ma l'esempio XML con Spring 5.1.4 è storico. Usa una release supportata, limita TRACE alle diagnosi controllate e, in produzione, preferisci metriche, tracing e log strutturati.

Nota di sicurezza: i comandi e gli esempi di configurazione dell'articolo originale non sono stati rieseguiti in un ambiente di produzione moderno. Prima di applicarli, verifica versioni supportate, backup, controlli di accesso e procedura di rollback in un ambiente di prova isolato.

Fonti primarie ufficiali

Panoramica

Questo articolo mostra come configurare DebugInterceptor di Spring per tracciare tramite AOP l'ingresso e l'uscita dai metodi selezionati. L'esempio affianca alla documentazione una configurazione riproducibile con Spring 5.1.4.

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

Indice dei contenuti

  1. Che cos'è un DebugInterceptor?
  2. Configurazione
  3. Conclusione

1. Che cos'è un DebugInterceptor?

DebugInterceptor è un interceptor Spring AOP che registra l'ingresso e l'uscita da una chiamata di metodo. L'esempio usa le librerie Spring 5.1.4 indicate di seguito.

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

La classe interessata è "org.springframework.aop.interceptor.DebugInterceptor".

La programmazione orientata agli aspetti (AOP) applica un comportamento trasversale agli oggetti gestiti dal container DI di Spring senza inserirlo nella logica applicativa.

In questo caso DebugInterceptor viene associato al componente creato con @Component.

1-1. Ambiente dell'esempio

I JAR e le versioni sono specificati perché comportamento e livello di log possono cambiare tra una release e l'altra.

Versione di Spring AOPspring-aop-5.1.4.RELEASE.jar
Versione di Spring Beansspring-beans-5.1.4.RELEASE.jar
Librerie di loggingslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Passaggi necessari

La configurazione richiede tre passaggi.

  • Creare un'istanza con @Component.
  • Definire AOP in applicationContext.xml
  • Modifica delle impostazioni di output del log

2. Configurazione

Le sezioni seguenti applicano questi passaggi a una classe dimostrativa.

2-1. Creare un'istanza con @Component.

La classe seguente è dichiarata con @Component. Il metodo si limita a restituire il controllo, così la traccia dell'interceptor rimane isolata.

TestAop.java


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

        return;

    }

}

2-2. Definire AOP in applicationContext.xml

Dichiara l'interceptor e il pointcut in applicationContext.xml. Le righe rosse appartengono alla configurazione 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">
~abbreviazione~
    <!-- Test di 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>

L'espressione pointcut segue questa forma:

pointcut="execution(* nome del pacchetto.nome della classe.nome del metodo(..))"

Nell'esempio gli elementi sono:

• nome del pacchetto: com.example

• nome della classe: TestAop

• nome del metodo: testMethod

Per selezionare tutti i metodi della classe usa l'espressione più ampia seguente:

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

2-3. Modifica delle impostazioni di output del log

In questo esempio DebugInterceptor scrive i messaggi a livello TRACE. La parte rossa abilita quindi TRACE soltanto per il package dell'interceptor; adatta il resto di logback.xml alle regole dell'applicazione.

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>

Con spring-aop-5.1.4.RELEASE.jar il livello DEBUG non include questi messaggi: il logger dell'interceptor deve accettare TRACE.

Se la traccia non compare, verifica il pointcut, il passaggio della chiamata attraverso il proxy Spring e il livello effettivo del logger.

2-4. Risultato.

Quando testMethod viene chiamato tramite il proxy Spring, la configurazione produce le righe seguenti. L'estratto conserva i messaggi Entering ed Exiting che racchiudono la chiamata.

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

Usa DebugInterceptor soltanto per diagnosi controllate, limita il pointcut e verifica che argomenti o valori di ritorno sensibili non finiscano nei log.

■INFORMATION

Articoli


■PROFILE

Profilo


■Contatti

Contatti