Come utilizzare il DebugInterceptor di Spring.


Data di pubblicazione:19 gennaio 2021.



INFOMARTION > Come utilizzare il DebugInterceptor di Spring.

Panoramica.

Si tratta di come utilizzare il DebugInterceptor di Spring. Il seguente sito web di Spring mi ha aiutato a capire il concetto, ma era difficile capire cosa fare esattamente solo dal sito web, quindi ho verificato i risultati.

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

Indice dei contenuti

  1. Che cos'è un DebugInterceptor?
  2. montaggio
  3. sintesi

1. Che cos'è un DebugInterceptor?

DebugInterceptor è una libreria che produce registri tramite AOP. In particolare, le seguenti librerie (file jar). Versione 5.1.4.

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

Il file Java specifico è "org.springframework.aop.interceptor.DebugInterceptor".

In breve, AOP è una tecnica per iniettare l'elaborazione nelle istanze gestite nel contenitore DI di Spring. Il nome ufficiale di AOP è Programmazione orientata agli aspetti.

In questo caso, vogliamo iniettare un DebugInterceptor nell'istanza generata da @Component.

1-1. ambiente di implementazione

Vorrei descrivere il Jar e la versione utilizzata, poiché potrebbero esserci leggere differenze a seconda dell'ambiente.

Versione di spring aopspring-aop-5.1.4.RELEASE.jar
Versione dei fagioli di primaveraspring-beans-5.1.4.RELEASE.jar
Versione della libreria di output del logslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Lavoro richiesto.

Il lavoro richiesto è il seguente.

  • Creare un'istanza con @Component.
  • Definire AOP in applicationContext.xml
  • Modifica delle impostazioni di output del log

2. montaggio

Ora vorrei metterlo in pratica.

2-1. Creare un'istanza con @Component.

Preparare una classe con "@Component" dichiarato come segue. Eseguire solo 'return' perché si vuole vedere solo l'AOP.

TestAop.java


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

        return;

    }

}

2-2. Definire AOP in applicationContext.xml

Impostare l'AOP per iniettare il processo. Le aree rosse sono quelle rilevanti per il POA.

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">
~abbreviazione~
    <!-- Test di Spring 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' è scritto come segue.

pointcut="execution(* nome del pacchetto.nome della classe.nome del metodo(..))"

Nell'esempio precedente, la situazione è la seguente.

・nome del pacchetto:com.example

・nome della classe:TestAop

・nome del metodo:testMethod

Se si vuole applicare a tutti i metodi, vale quanto segue.

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

2-3. Modifica delle impostazioni di output del log

Modificare il livello di log solo per DebugInterceptor, poiché il livello di output del log descritto in DebugInterceptor è "TRACE". Le aree in rosso sono quelle che devono essere impostate. Il resto delle impostazioni può essere inserito in modo arbitrario.

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>

Ho dato un'occhiata ai blog di altre persone quando l'ho creato e alcuni affermavano che l'output doveva essere emesso a livello di log DEBUG, ma nel caso di 'spring-aop-5.1.4.RELEASE.jar' sembra che l'output non venga emesso a meno che non sia a livello di log TRACE.

Se la configurazione dovrebbe funzionare, ma per qualche motivo i log non vengono emessi, provare a cambiare il livello di log in TRACE.

2-4. Risultato.

Se si chiama testMethod in TestAop.java con le impostazioni di cui sopra, si ottiene il seguente log. Il registro è lungo, quindi ho cancellato alcune righe, ma dovrebbe produrre due righe ciascuna per l'entrata e l'uscita, per un totale di quattro righe.

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

Se non si ha familiarità con l'uso del DebugInterceptor, fare riferimento ad esso.

Grazie per aver guardato fino alla fine.




■INFORMATION

Fare clic qui per accedere alla pagina superiore di INFORMAZIONI.


■PROFILE

Cliccare qui per un profilo.


■Dettagli di contatto.

Per richieste di informazioni sull'articolo, contattateci qui.