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?
  2. montare
  3. rezumat

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ă aopspring-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 jurnaluluislf4j-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.

TestAop.java


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

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

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>

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.