Sådan bruger du Spring's DebugInterceptor.
Udgivelsesdato:19. januar 2021.
INFOMARTION > Sådan bruger du Spring's DebugInterceptor.
Oversigt.
Dette handler om, hvordan du bruger Spring's DebugInterceptor. Det følgende Spring-websted hjalp mig med at forstå konceptet, men det var svært at forstå, hvad man præcist skulle gøre ud fra webstedet alene, så jeg kontrollerede faktisk resultaterne.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Indholdsfortegnelse
1. Hvad er en DebugInterceptor?
DebugInterceptor er et bibliotek, der udsender logs ved hjælp af AOP. Især følgende biblioteker (jar-filer). Version 5.1.4.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
Den specifikke Java-fil er "org.springframework.aop.interceptor.DebugInterceptor".
Kort fortalt er AOP en teknik til at injicere behandling i instanser, der administreres i Spring's DI-container. Det officielle navn for AOP er Aspect Oriented Programming.
I dette tilfælde ønsker vi at injicere en DebugInterceptor i den instans, der genereres af @Component.
1-1. gennemførelsesmiljø
Jeg vil gerne beskrive den anvendte Jar og den anvendte version, da der kan være små forskelle afhængigt af miljøet.
Version af spring aop | spring-aop-5.1.4.RELEASE.jar |
---|---|
Version af forårsbønner | spring-beans-5.1.4.RELEASE.jar |
Version af log output-biblioteket | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Det nødvendige arbejde.
Der kræves følgende arbejde.
- Opret en instans med @Component.
- Definer AOP i applicationContext.xml
- Ændring af indstillingerne for logudgang
2. montering
Nu vil jeg gerne gennemføre det i praksis.
2-1. Opret en instans med @Component.
Forbered en klasse med "@Component", der er erklæret som følger. Udfør kun "return", da du kun ønsker at se AOP'en.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Definer AOP i applicationContext.xml
Opsæt AOP'en til at injicere processen. De røde områder er de områder, der er relevante for det årlige operationelle 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">
~forkortelse~
<!-- AOP-afprøvning i foråret. -->
<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' skrives som følger.
pointcut="execution(* pakkens navn.klassens navn.metode-navn(..))"
I eksemplet ovenfor ville det være som følger.
・pakkens navn:com.example
・klassens navn:TestAop
・metode-navn:testMethod
Hvis du ønsker at anvende den på alle metoder, gælder følgende.
・pointcut="execution(* com.example.TestAop.*(..))"
2-3. Ændring af indstillingerne for logudgang
Ændr logningsniveauet kun for DebugInterceptor, da niveauet for logoutput, der er beskrevet i DebugInterceptor, er "TRACE". Områder med rødt er de områder, der skal indstilles. Resten af indstillingerne kan angives vilkårligt.
<?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>
Jeg kiggede på nogle andres blogs, da jeg oprettede den, og nogle af dem sagde, at output skal udgives på logniveau DEBUG, men i tilfælde af "spring-aop-5.1.4.RELEASE.jar" ser det ud til, at output ikke udgives, medmindre det er på logniveau TRACE.
Hvis konfigurationen burde fungere, men logfilerne af en eller anden grund ikke vises, kan du prøve at ændre logniveauet til TRACE.
2-4. Resultat.
Hvis du kalder testMethod i TestAop.java med ovenstående indstillinger udført, bør følgende log vises. Loggen er lang, så jeg har slettet et par linjer, men den skal vise to linjer hver for Entering og Exiting, så der er i alt fire linjer.
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. resumé
Hvis du ikke er bekendt med brugen af DebugInterceptor, henvises du til den.
Tak, fordi du kiggede med til slutningen.