Springin DebugInterceptorin käyttö.


Julkaisupäivä:19. tammikuuta 2021.



INFOMARTION > Springin DebugInterceptorin käyttö.

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ö

Haluaisin kuvata käytetyn purkin ja version, koska niissä voi olla pieniä eroja ympäristöstä riippuen.

Kevään aop-versiospring-aop-5.1.4.RELEASE.jar
Versio kevätpavuistaspring-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.

Kiitos, että katsoitte loppuun asti.