Kaip naudoti "Spring" DebugInterceptor.


Paskelbimo data:2021 m. sausio 19 d.



INFOMARTION > Kaip naudoti "Spring" DebugInterceptor.

Apžvalga.

Tai apie tai, kaip naudoti "Spring" DebugInterceptor. Toliau pateikta "Spring" svetainė padėjo man suprasti šią koncepciją, tačiau vien iš svetainės buvo sunku suprasti, ką tiksliai daryti, todėl iš tikrųjų patikrinau rezultatus.

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

Turinys

  1. Kas yra DebugInterceptor?
  2. montavimas
  3. santrauka

1. Kas yra DebugInterceptor?

DebugInterceptor yra biblioteka, kuri išveda žurnalus pagal AOP. Konkrečiai šios bibliotekos (jar failai). 5.1.4 versija.

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

Konkretus "Java" failas yra "org.springframework.aop.interceptor.DebugInterceptor".

Trumpai tariant, AOP - tai apdorojimo įvedimo į "Spring" DI konteinerio valdomus egzempliorius metodas. Oficialus AOP pavadinimas - į aspektus orientuotas programavimas.

Šiuo atveju norime įterpti DebugInterceptor į egzempliorių, kurį generuoja @Component.

1-1. įgyvendinimo aplinka

Norėčiau aprašyti naudojamą Jar ir versiją, nes priklausomai nuo aplinkos gali būti nedidelių skirtumų.

Pavasario aop versijaspring-aop-5.1.4.RELEASE.jar
Pavasarinių pupelių versijaspring-beans-5.1.4.RELEASE.jar
Žurnalo išvesties bibliotekos versijaslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Reikalingas darbas.

Reikia atlikti šiuos darbus.

  • Sukurkite egzempliorių su @Component.
  • AOP apibrėžimas applicationContext.xml
  • Žurnalo išvesties nustatymų keitimas

2. montavimas

Dabar norėčiau tai įgyvendinti praktiškai.

2-1. Sukurkite egzempliorių su @Component.

Paruoškite klasę su "@Component", deklaruojamą taip. Vykdykite tik "return", nes norite matyti tik AOP.

TestAop.java


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

        return;

    }

}

2-2. AOP apibrėžimas applicationContext.xml

Nustatykite AOP, kad procesas būtų įvestas. Raudonai pažymėtos tos sritys, kurios yra susijusios su 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">
~sutrumpinimas~
    <!-- Pavasario AOP testavimas. -->
    <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" rašomas taip.

pointcut="execution(* pakuotės pavadinimas.klasės pavadinimas.metodo pavadinimas(..))"

Pirmiau pateiktame pavyzdyje jis būtų toks.

・pakuotės pavadinimas:com.example

・klasės pavadinimas:TestAop

・metodo pavadinimas:testMethod

Jei norite jį taikyti visiems metodams, taikomos šios nuostatos.

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

2-3. Žurnalo išvesties nustatymų keitimas

Pakeiskite tik DebugInterceptor registravimo lygį, nes DebugInterceptor aprašytas žurnalo išvesties lygis yra "TRACE". Raudona spalva pažymėtos sritys, kurias reikia nustatyti. Likusius nustatymus galima įvesti savavališkai.

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>

Aš pažvelgiau į kai kurių kitų žmonių tinklaraščius jį kuriant, ir kai kurie teigė, kad išvestis turėtų būti išvesta žurnalo lygiu DEBUG, tačiau "spring-aop-5.1.4.RELEASE.jar" atveju atrodo, kad išvestis nėra išvesta, nebent ji yra žurnalo lygiu TRACE.

Jei konfigūracija turėtų veikti, bet dėl kokių nors priežasčių žurnalai neišvedami, pabandykite pakeisti žurnalo lygį į TRACE.

2-4. Rezultatas.

Jei iškviesite TestAop.java testMethod su pirmiau nurodytais nustatymais, turėtų būti išvestas toks žurnalas. Žurnalas yra ilgas, todėl ištryniau kelias eilutes, tačiau jis turėtų išvesti po dvi eilutes, skirtas įėjimui ir išėjimui, iš viso keturias eilutes.

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

Jei nesate susipažinę su "DebugInterceptor" naudojimu, žr.

Dėkojame, kad žiūrėjote iki pabaigos.