Cum se utilizează DebugInterceptor din Spring.
Data publicării:19 ianuarie 2021.
INFOMARTION > Cum se utilizează DebugInterceptor din Spring.
Prezentare generală.
Aceasta este despre cum să utilizați DebugInterceptor Spring. Următorul site web Spring m-a ajutat să înțeleg conceptul, dar a fost dificil să înțeleg ce anume trebuie să fac doar din site-ul web, așa că am verificat rezultatele.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Cuprins
1. Ce este un DebugInterceptor?
DebugInterceptor este o bibliotecă care generează jurnale prin AOP. Mai exact, următoarele biblioteci (fișiere jar). Versiunea 5.1.4.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
Fișierul Java specific este "org.springframework.aop.interceptor.DebugInterceptor".
Pe scurt, AOP este o tehnică de injectare a procesării în instanțele gestionate în containerul DI al Spring. Numele oficial al AOP este Aspect Oriented Programming (programare orientată pe aspecte).
În acest caz, dorim să injectăm un DebugInterceptor în instanța care este generată de @Component.
1-1. mediul de implementare
Aș dori să descriu Jar și versiunea utilizată, deoarece pot exista mici diferențe în funcție de mediu.
Versiunea de primăvară aop | spring-aop-5.1.4.RELEASE.jar |
---|---|
Versiune de fasole de primăvară | spring-beans-5.1.4.RELEASE.jar |
Versiunea bibliotecii de ieșire a jurnalului | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Lucrări necesare.
Lucrările necesare sunt următoarele.
- Creați o instanță cu @Component.
- Definiți AOP în applicationContext.xml
- Modificarea setărilor de ieșire din jurnal
2. montare
Acum aș dori să o pun în practică.
2-1. Creați o instanță cu @Component.
Pregătiți o clasă cu "@Component" declarată după cum urmează. Executați doar "return", deoarece doriți să vedeți doar AOP.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Definiți AOP în applicationContext.xml
Configurați AOP pentru a injecta procesul. Zonele de culoare roșie sunt cele relevante pentru 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">
~abrevierea~
<!-- Testarea 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" se scrie după cum urmează.
pointcut="execution(* numele pachetului.numele clasei.nume-metodă(..))"
În exemplul de mai sus, ar fi după cum urmează.
・numele pachetului:com.example
・numele clasei:TestAop
・nume-metodă:testMethod
Dacă doriți să o aplicați la toate metodele, se aplică următoarele.
・pointcut="execution(* com.example.TestAop.*(..))"
2-3. Modificarea setărilor de ieșire din jurnal
Modificați nivelul de jurnalizare numai pentru DebugInterceptor, deoarece nivelul de ieșire a jurnalului descris în DebugInterceptor este "TRACE". Zonele marcate cu roșu sunt cele care trebuie stabilite. Restul setărilor pot fi introduse în mod arbitrar.
<?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>
M-am uitat pe blogurile altor persoane atunci când l-am creat, iar unele au afirmat că rezultatul ar trebui să fie afișat la nivelul de jurnal DEBUG, dar în cazul 'spring-aop-5.1.4.RELEASE.jar' se pare că rezultatul nu este afișat decât dacă este la nivelul de jurnal TRACE.
În cazul în care configurația ar trebui să funcționeze, dar, din anumite motive, jurnalele nu sunt afișate, încercați să schimbați nivelul jurnalului la TRACE.
2-4. Rezultat.
Dacă apelați testMethod în TestAop.java cu setările de mai sus completate, ar trebui să se afișeze următorul jurnal. Jurnalul este lung, așa că am șters câteva rânduri, dar ar trebui să se afișeze două rânduri pentru fiecare intrare și ieșire, pentru un total de patru rânduri.
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. rezumat
Dacă nu sunteți familiarizat cu utilizarea DebugInterceptor, vă rugăm să consultați acest document.
Vă mulțumim că ați urmărit până la sfârșit.