Jak používat nástroj DebugInterceptor od jara.


Datum vydání:19. ledna 2021.



INFOMARTION > Jak používat nástroj DebugInterceptor od jara.

Přehled.

Toto je návod na použití nástroje DebugInterceptor od společnosti Spring. Následující webová stránka Spring mi pomohla pochopit koncept, ale bylo obtížné pochopit, co přesně dělat z webové stránky sám, takže jsem vlastně ověřil výsledky.

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

Obsah

  1. Co je DebugInterceptor?
  2. montáž
  3. shrnutí

1. Co je DebugInterceptor?

DebugInterceptor je knihovna, která vypisuje protokoly pomocí AOP. Konkrétně se jedná o následující knihovny (soubory jar). Verze 5.1.4.

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

Konkrétní soubor jazyka Java je "org.springframework.aop.interceptor.DebugInterceptor".

Stručně řečeno, AOP je technika pro injektování zpracování do instancí spravovaných v kontejneru Spring DI. Oficiální název pro AOP je aspektově orientované programování.

V tomto případě chceme do instance generované pomocí @Component injektovat DebugInterceptor.

1-1. implementační prostředí

Rád bych popsal použitý Jar a verzi, protože v závislosti na prostředí mohou existovat drobné rozdíly.

Verze spring aopspring-aop-5.1.4.RELEASE.jar
Verze jarních fazolíspring-beans-5.1.4.RELEASE.jar
Verze výstupní knihovny protokoluslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

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

Požadované práce jsou následující.

  • Vytvoření instance pomocí @Component.
  • Definice AOP v souboru applicationContext.xml
  • Změna nastavení výstupu protokolu

2. montáž

Nyní bych ji rád zavedl do praxe.

2-1. Vytvoření instance pomocí @Component.

Připravte si třídu s deklarací "@Component" následujícím způsobem. Proveďte pouze příkaz 'return', protože chcete zobrazit pouze AOP.

TestAop.java


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

        return;

    }

}

2-2. Definice AOP v souboru applicationContext.xml

Nastavte AOP pro injektování procesu. Červeně jsou vyznačeny oblasti, které se 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">
~zkrácení~
    <!-- Jarní testování 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' se zapisuje takto.

pointcut="execution(* název balíčku.název třídy.název metody(..))"

Ve výše uvedeném příkladu by to bylo následující.

・název balíčku:com.example

・název třídy:TestAop

・název metody:testMethod

Pokud ji chcete použít pro všechny metody, platí následující.

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

2-3. Změna nastavení výstupu protokolu

Změňte úroveň protokolování pouze pro DebugInterceptor, protože úroveň výstupu protokolu popsaná v DebugInterceptoru je "TRACE". Červeně jsou označeny oblasti, které je třeba nastavit. Ostatní nastavení lze zadat libovolně.

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>

Při vytváření jsem se díval na blogy jiných lidí a někteří uváděli, že výstup by měl být vyveden na úrovni protokolu DEBUG, ale v případě 'spring-aop-5.1.4.RELEASE.jar' se zdá, že výstup není vyveden, pokud není na úrovni protokolu TRACE.

Pokud by konfigurace měla fungovat, ale z nějakého důvodu se protokoly nevypisují, zkuste změnit úroveň protokolu na TRACE.

2-4. Výsledek.

Pokud zavoláte testMethod v TestAop.java s výše uvedeným nastavením, měl by se zobrazit následující protokol. Protokol je dlouhý, takže jsem několik řádků smazal, ale měl by vypisovat po dvou řádcích pro Entering a Exiting, celkem tedy čtyři řádky.

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. shrnutí

Pokud nejste obeznámeni s použitím nástroje DebugInterceptor, přečtěte si jej.

Děkujeme, že jste se dívali až do konce.




■INFORMATION

Kliknutím sem přejdete na horní stránku s informacemi.


■PROFILE

Kliknutím sem získáte profil.


■Kontaktní údaje.

V případě dotazů k článku nás prosím kontaktujte zde.