Kako uporabljati Springov DebugInterceptor.
Datum objave:19. januar 2021.
INFOMARTION > Kako uporabljati Springov DebugInterceptor.
Pregled.
To je o tem, kako uporabiti Springov DebugInterceptor. Naslednja spletna stran Spring mi je pomagala razumeti koncept, vendar je bilo samo na spletni strani težko razumeti, kaj natančno je treba storiti, zato sem dejansko preveril rezultate.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Kazalo vsebine
1. Kaj je DebugInterceptor?
DebugInterceptor je knjižnica, ki izpisuje dnevnike z AOP. Zlasti naslednje knjižnice (datoteke jar). Različica 5.1.4.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
Posebna datoteka Java je "org.springframework.aop.interceptor.DebugInterceptor".
Na kratko, AOP je tehnika za vbrizgavanje obdelave v instance, ki se upravljajo v Springovem vsebniku DI. Uradno ime za AOP je v vidik usmerjeno programiranje.
V tem primeru želimo injicirati DebugInterceptor v primerek, ki ga ustvari @Component.
1-1. okolje izvajanja
Rad bi opisal uporabljeni Jar in različico, saj lahko pride do manjših razlik glede na okolje.
Različica spomladi aop | spring-aop-5.1.4.RELEASE.jar |
---|---|
Različica spomladanskega fižola | spring-beans-5.1.4.RELEASE.jar |
Različica knjižnice za izpis dnevnika | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Potrebno delo.
Potrebna so naslednja dela.
- Ustvarite primerek z @Component.
- Opredelitev AOP v applicationContext.xml
- Spreminjanje nastavitev izpisa dnevnika
2. montaža
Zdaj bi ga rad izvedel v praksi.
2-1. Ustvarite primerek z @Component.
Pripravite razred z deklaracijo "@Component", kot sledi. Izvedite samo "return", saj želite videti samo AOP.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Opredelitev AOP v applicationContext.xml
Nastavite postopek AOP za injiciranje procesa. Rdeča območja so tista, ki so pomembna za operativni program.
<?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">
~okrajšava~
<!-- Spomladansko testiranje 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' je zapisan na naslednji način.
pointcut="execution(* ime paketa.ime razreda.ime metode(..))"
V zgornjem primeru bi bilo to naslednje.
・ime paketa:com.example
・ime razreda:TestAop
・ime metode:testMethod
Če jo želite uporabiti za vse metode, velja naslednje.
・pointcut="execution(* com.example.TestAop.*(..))"
2-3. Spreminjanje nastavitev izpisa dnevnika
Spremenite raven beleženja samo za DebugInterceptor, saj je raven izpisa dnevnika, opisana v DebugInterceptorju, "TRACE". Z rdečo so označena področja, ki jih je treba nastaviti. Ostale nastavitve lahko vnesete poljubno.
<?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 ustvarjanju sem si ogledal bloge nekaterih drugih ljudi in nekateri so navedli, da je treba izhod izpisati na ravni dnevnika DEBUG, vendar se v primeru 'spring-aop-5.1.4.RELEASE.jar' zdi, da se izhod ne izpisuje, razen če je na ravni dnevnika TRACE.
Če bi konfiguracija morala delovati, vendar se dnevniki iz nekega razloga ne izpisujejo, poskusite spremeniti raven dnevnika na TRACE.
2-4. Rezultat.
Če pokličete testMethod v TestAop.java z zgornjimi nastavitvami, se izpiše naslednji dnevnik. Dnevnik je dolg, zato sem izbrisal nekaj vrstic, vendar bi se moralo izpisati po dve vrstici za vstop in izstop, skupaj torej štiri vrstice.
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. povzetek
Če niste seznanjeni z uporabo DebugInterceptorja, si ga oglejte.
Hvala, ker ste gledali do konca.