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?
  2. montaža
  3. povzetek

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 aopspring-aop-5.1.4.RELEASE.jar
Različica spomladanskega fižolaspring-beans-5.1.4.RELEASE.jar
Različica knjižnice za izpis dnevnikaslf4j-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.

TestAop.java


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

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">
~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.

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>

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.




■INFORMATION

Kliknite tukaj za prehod na zgornjo stran INFORMACIJE.


■PROFILE

Kliknite tukaj za profil.


■Kontaktni podatki.

Za poizvedbe o članku nam pišite tukaj.