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?
  2. asennus
  3. Yhteenveto

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-versiospring-aop-5.1.4.RELEASE.jar
Spring Beans -versiospring-beans-5.1.4.RELEASE.jar
Lokitulostuskirjaston versioslf4j-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.

TestAop.java


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

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">
~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.

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>

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.