Spring DebugInterceptor: Înregistrarea trasării AOP pentru dezvoltare
Data publicării:
Actualizat:
Articole tehnice > Spring DebugInterceptor: Înregistrarea trasării AOP pentru dezvoltare
Contextul din 2026 și utilizarea în siguranță
Concluzie: Spring DebugInterceptor este un interceptor bazat pe proxy AOP care înregistrează detaliile apelurilor de metode la nivelul TRACE. Este destinat depanării, nu unei strategii generale de observabilitate în producție.
Ce vei învăța
- Cum selectează un advisor metodele și atașează interceptorul beanurilor Spring potrivite.
- De ce auto-invocarea și obiectele create în afara containerului Spring pot ocoli advice-ul bazat pe proxy.
- Cum evitați expunerea argumentelor, datelor personale, credențialelor sau unui volum excesiv de loguri.
Cui se adresează: Dezvoltatorilor Spring care întrețin aplicații configurate prin XML sau studiază mecanismul clasic de proxy AOP.
Contextul din 2026: Clasa există în continuare în Spring Framework, însă exemplul XML bazat pe Spring 5.1.4 este vechi. Folosiți o versiune Spring acceptată, limitați logarea TRACE la sesiuni de diagnostic și preferați metrici, tracing și logare structurată pentru producție.
Notă de siguranță: comenzile și exemplele de configurare din articolul original nu au fost reluate într-un mediu de producție actual. Verificați versiunile acceptate, copiile de rezervă, controalele de acces și pașii de retragere într-un mediu de testare separat înainte de a le aplica.
Surse oficiale principale
Prezentare generală
Articolul arată cum se atașează Spring DebugInterceptor unui bean printr-o configurație AOP în XML, cum se activează nivelul TRACE și cum se verifică outputul. Documentația Spring de mai jos este referința pentru concepte și API.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Cuprins
1. Ce este un DebugInterceptor?
DebugInterceptor este o clasă din modulul Spring AOP care înregistrează intrarea și ieșirea din apelurile metodelor la nivelul TRACE. Exemplul folosește artifactul și versiunea următoare.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
Numele complet al clasei este "org.springframework.aop.interceptor.DebugInterceptor".
Programarea orientată pe aspecte (AOP) aplică procesări suplimentare beanurilor administrate de containerul Spring. În acest exemplu, proxy-ul Spring execută DebugInterceptor la apelarea metodei țintă.
Ținta este beanul creat prin @Component și selectat de expresia pointcut.
1-1. Mediul exemplului
Configurația poate diferi între versiuni. Exemplul original folosește următoarele JAR-uri.
| Versiunea Spring AOP | spring-aop-5.1.4.RELEASE.jar |
|---|---|
| Versiunea Spring Beans | spring-beans-5.1.4.RELEASE.jar |
| Versiunea bibliotecilor de logare | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Pașii necesari
Configurația are trei pași:
- crearea beanului cu @Component;
- Definiți AOP în applicationContext.xml
- activarea nivelului TRACE pentru loggerul necesar.
2. Implementare
Secțiunea următoare aplică cei trei pași în configurația de exemplu.
2-1. Crearea beanului cu @Component
Definiți o clasă cu adnotarea "@Component" ca mai jos. Metoda nu execută altă logică, astfel încât outputul AOP să fie ușor de observat.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Definiți AOP în applicationContext.xml
Adăugați definiția AOP care atașează interceptorul metodei țintă. Zonele roșii indică elementele relevante pentru 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">
~abrevierea~
<!-- Testarea 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>
Expresia pointcut are forma următoare.
pointcut="execution(* numele pachetului.numele clasei.nume-metodă(..))"
În exemplu, pachetul este com.example, clasa este TestAop, iar metoda este testMethod.
Pentru a selecta toate metodele clasei, utilizați expresia următoare.
pointcut="execution(* com.example.TestAop.*(..))"
2-3. Configurarea nivelului de logare
DebugInterceptor scrie mesaje la nivelul TRACE. Activați acest nivel numai pentru loggerul necesar, astfel încât restul aplicației să nu genereze un volum inutil de loguri. Zonele roșii indică setările relevante.
<?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>
În spring-aop-5.1.4.RELEASE.jar, DebugInterceptor scrie la nivelul TRACE, nu DEBUG.
Dacă proxy-ul este configurat corect, dar mesajele nu apar, verificați dacă loggerul corespunzător permite TRACE. Nu activați acest nivel la scară largă în producție: volumul poate fi mare, iar mesajele pot conține date sensibile.
2-4. Verificarea rezultatului
După aplicarea configurației, apelarea metodei testMethod din TestAop.java produce un log asemănător celui de mai jos. Exemplul a fost scurtat și conține două mesaje Entering și două mesaje Exiting.
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. Rezumat
DebugInterceptor ajută la observarea limitelor apelurilor de metodă pentru beanurile proxiate de Spring. Definiți un pointcut restrâns, activați TRACE numai în timpul diagnosticului și folosiți instrumente de observabilitate mai controlate în producție.