Ako používať nástroj DebugInterceptor od spoločnosti Spring.


Dátum vydania:19. januára 2021.



INFOMARTION > Ako používať nástroj DebugInterceptor od spoločnosti Spring.

Prehľad.

Toto je o tom, ako používať nástroj DebugInterceptor od spoločnosti Spring. Nasledujúca webová stránka Spring mi pomohla pochopiť tento koncept, ale bolo ťažké pochopiť, čo presne robiť len z webovej stránky, takže som si výsledky skutočne overil.

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api

Obsah

  1. Čo je DebugInterceptor?
  2. montáž
  3. zhrnutie

1. Čo je DebugInterceptor?

DebugInterceptor je knižnica, ktorá vypisuje protokoly pomocou AOP. Konkrétne ide o tieto knižnice (súbory jar). Verzia 5.1.4.

https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE

Konkrétny súbor Java je "org.springframework.aop.interceptor.DebugInterceptor".

Stručne povedané, AOP je technika na injektovanie spracovania do inštancií spravovaných v kontajneri Spring DI. Oficiálny názov pre AOP je aspektovo orientované programovanie.

V tomto prípade chceme do inštancie, ktorá sa generuje pomocou @Component, injektovať DebugInterceptor.

1-1. prostredie implementácie

Chcel by som opísať použitý Jar a verziu, pretože v závislosti od prostredia môžu existovať malé rozdiely.

Verzia jarného aopspring-aop-5.1.4.RELEASE.jar
Verzia jarnej fazulespring-beans-5.1.4.RELEASE.jar
Verzia knižnice výstupu denníkaslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Požadované práce.

Požadované práce sú nasledovné.

  • Vytvorenie inštancie pomocou @Component.
  • Definícia AOP v súbore applicationContext.xml
  • Zmena nastavení výstupu denníka

2. montáž

Teraz by som ho chcel uplatniť v praxi.

2-1. Vytvorenie inštancie pomocou @Component.

Pripravte si triedu s "@Component" deklarovanú takto. Vykonajte len príkaz 'return', pretože chcete vidieť len AOP.

TestAop.java


@Component
public class TestAop{
    public void testMethod() {

        return;

    }

}

2-2. Definícia AOP v súbore applicationContext.xml

Nastavte AOP na vstrekovanie procesu. Červenou farbou sú označené oblasti, ktoré sa týkajú AOP.

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">
~skrátenie~
    <!-- Jarné testovanie 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>

'pointcut' sa píše takto.

pointcut="execution(* názov balíka.názov triedy.názov metódy(..))"

V uvedenom príklade by to bolo takto.

・názov balíka:com.example

・názov triedy:TestAop

・názov metódy:testMethod

Ak ju chcete použiť na všetky metódy, platí nasledujúce.

・pointcut="execution(* com.example.TestAop.*(..))"

2-3. Zmena nastavení výstupu denníka

Zmeňte úroveň protokolovania len pre DebugInterceptor, pretože úroveň výstupu protokolu opísaná v DebugInterceptor je "TRACE". Červenou farbou sú označené oblasti, ktoré je potrebné nastaviť. Ostatné nastavenia môžete zadať ľubovoľne.

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>

Pri vytváraní som sa pozrel na blogy niektorých iných ľudí a niektorí uviedli, že výstup by mal byť na úrovni protokolu DEBUG, ale v prípade 'spring-aop-5.1.4.RELEASE.jar' sa zdá, že výstup nie je výstupný, pokiaľ nie je na úrovni protokolu TRACE.

Ak by konfigurácia mala fungovať, ale z nejakého dôvodu sa protokoly nevypisujú, skúste zmeniť úroveň protokolu na TRACE.

2-4. Výsledok.

Ak zavoláte testMethod v TestAop.java s vyššie uvedenými nastaveniami, mal by sa vypísať nasledujúci protokol. Záznam je dlhý, takže som odstránil niekoľko riadkov, ale mal by vypisovať po dva riadky pre Entering a Exiting, spolu štyri riadky.

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

Ak nie ste oboznámení s používaním DebugInterceptor, pozrite si ho.

Ďakujeme vám za sledovanie až do konca.