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?
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 aop | spring-aop-5.1.4.RELEASE.jar |
---|---|
Verze jarních fazolí | spring-beans-5.1.4.RELEASE.jar |
Verze výstupní knihovny protokolu | slf4j-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.
@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.
<?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ě.
<?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.