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?
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 AOP | spring-aop-5.1.4.RELEASE.jar |
|---|---|
| Versione di Spring Beans | spring-beans-5.1.4.RELEASE.jar |
| Librerie di logging | slf4j-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.
@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.
<?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.
<?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.