Springin DebugInterceptorin käyttö.
Julkaistu:
Päivitetty:
Artikkelit › Springin DebugInterceptorin käyttö.
Tilanne vuonna 2026 ja turvallinen käyttö
Johtopäätös: Springin DebugInterceptor on proxypohjainen AOP-interceptor, joka kirjaa metodikutsujen tiedot TRACE-tasolla. Se on tarkoitettu vianmääritykseen, ei tuotantoympäristön yleiseksi havaittavuusratkaisuksi.
Mitä opit
- Miten advisor valitsee metodit ja liittää interceptoriin sopivat Spring beanit.
- Miksi self-invocation ja Spring-containerin ulkopuolella luodut objektit voivat ohittaa proxy advicen.
- Miten vältät parametrien, henkilötietojen, tunnistetietojen tai kohtuuttoman lokimäärän tallentamisen.
Kenelle artikkeli on tarkoitettu: Spring-kehittäjille, jotka ylläpitävät XML:llä määritettyä sovellusta tai opettelevat klassista proxypohjaista AOP:tä.
Tilanne vuonna 2026: Luokka on edelleen mukana Spring Frameworkin nykyisessä dokumentaatiossa, mutta alla oleva Spring 5.1.4:n XML-esimerkki on historiallinen. Käytä tuettua Spring-versiohaaraa, rajaa TRACE-loki hallittuun vianmääritykseen ja suosi tuotannossa nykyisiä metriikoita, tracingia ja rakenteista lokitusta.
Turvallisuushuomautus: Alkuperäisen artikkelin komentoja ja määritysesimerkkejä ei ole suoritettu uudelleen nykyaikaisessa tuotantoympäristössä. Tarkista tuetut versiot, ota varmuuskopio ja valmistele palautus erillisessä testiympäristössä ennen käyttöönottoa.
Viralliset lähteet
Yleiskatsaus
Tässä käsitellään Springin DebugInterceptorin käyttöä. Seuraava Spring-sivusto auttoi minua ymmärtämään konseptin, mutta oli vaikea ymmärtää, mitä tarkalleen ottaen pitäisi tehdä pelkän sivuston perusteella, joten tarkistin itse tulokset.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Sisällysluettelo
1. Mikä on DebugInterceptor?
DebugInterceptor on kirjasto, joka tuottaa lokit AOP:n avulla. Erityisesti seuraavat kirjastot (JAR-tiedostot). Versio 5.1.4.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
Erityinen Java-tiedosto on "org.springframework.aop.interceptor.DebugInterceptor".
Lyhyesti sanottuna AOP on tekniikka, jolla prosessointia voidaan lisätä Springin DI-säiliössä hallinnoituihin instansseihin. AOP:n virallinen nimi on Aspect Oriented Programming.
Tässä tapauksessa haluamme lisätä DebugInterceptorin instanssiin, jonka @Component luo.
1-1. toteutusympäristö
Seuraavassa kuvataan käytetyn JAR-tiedoston ja version, koska niissä voi olla pieniä eroja ympäristöstä riippuen.
| Kevään aop-versio | spring-aop-5.1.4.RELEASE.jar |
|---|---|
| Spring Beans -versio | spring-beans-5.1.4.RELEASE.jar |
| Lokitulostuskirjaston versio | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Tarvittava työ.
Tarvittavat työt ovat seuraavat.
- Luo instanssi @Componentilla.
- AOP:n määrittely applicationContext.xml-tiedostossa
- Lokitulostusasetusten muuttaminen
2. asennus
Nyt haluaisin toteuttaa sen käytännössä.
2-1. Luo instanssi @Componentilla.
Valmistele luokka, jonka "@Component" on ilmoitettu seuraavasti. Suorita vain 'return', koska haluat nähdä vain AOP:n.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. AOP:n määrittely applicationContext.xml-tiedostossa
Määritä AOP prosessin käynnistämistä varten. Punaisella on merkitty ne alueet, joilla on merkitystä AOP:n kannalta.
<?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">
~lyhennelmä~
<!-- Spring AOP -testaus. -->
<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' kirjoitetaan seuraavasti.
pointcut="execution(* paketin nimi.luokan nimi.method-name(.).)"
Yllä olevassa esimerkissä se olisi seuraava.
·paketin nimi:com.example
·luokan nimi:TestAop
·method-name:testMethod
Jos haluat soveltaa sitä kaikkiin menetelmiin, toimitaan seuraavasti.
·pointcut="execution(* com.example.TestAop.*(.).)"
2-3. Lokitulostusasetusten muuttaminen
Muuta lokitustasoa vain DebugInterceptorissa, sillä DebugInterceptorissa kuvattu lokitulostuksen taso on "TRACE". Punaisella merkityt alueet on asetettava. Muut asetukset voidaan syöttää mielivaltaisesti.
<?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>
Katsoin joidenkin muiden blogeja sitä luodessani, ja joissakin todettiin, että tulosteet pitäisi tulostaa lokitasolla DEBUG, mutta "spring-aop-5.1.4.RELEASE.jar" tapauksessa näyttää siltä, että tulosteet eivät tulostu, ellei se ole lokitasolla TRACE.
Jos asetusten pitäisi toimia, mutta jostain syystä lokit eivät tulostu, yritä vaihtaa lokitasoksi TRACE.
2-4. Tulos.
Jos kutsut TestAop.java-tiedoston testMethod-menetelmää, kun edellä mainitut asetukset on suoritettu, seuraava loki pitäisi tulostua. Loki on pitkä, joten poistin muutaman rivin, mutta sen pitäisi tulostaa kaksi riviä kullekin Entering- ja Exiting-ohjelmalle, yhteensä neljä riviä.
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. yhteenveto
Jos et tunne DebugInterceptorin käyttöä, tutustu siihen.
Tässä ovat tärkeimmät huomioitavat vaiheet ja rajoitukset.
■Artikkelit
■Profiili
■Yhteystiedot