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?
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 aop | spring-aop-5.1.4.RELEASE.jar |
---|---|
Versione dei fagioli di primavera | spring-beans-5.1.4.RELEASE.jar |
Versione della libreria di output del log | slf4j-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.
@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.
<?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.
<?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
■Dettagli di contatto.
Per richieste di informazioni sull'articolo, contattateci qui.