Как да използвате DebugInterceptor на Spring.


Дата на публикуване:19 януари 2021 г.



INFOMARTION > Как да използвате DebugInterceptor на Spring.

Преглед.

Става въпрос за това как да използвате DebugInterceptor на Spring. Следващият уебсайт на Spring ми помогна да разбера концепцията, но беше трудно да разбера какво точно да направя само от уебсайта, така че всъщност проверих резултатите.

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

Съдържание

  1. Какво е DebugInterceptor?
  2. монтаж
  3. резюме

1. Какво е DebugInterceptor?

DebugInterceptor е библиотека, която извежда дневници чрез AOP. По-конкретно следните библиотеки (jar файлове). Версия 5.1.4.

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

Конкретният Java файл е "org.springframework.aop.interceptor.DebugInterceptor".

Накратко, AOP е техника за инжектиране на обработка в инстанции, управлявани от DI контейнера на Spring. Официалното име на AOP е "Аспектно ориентирано програмиране".

В този случай искаме да инжектираме DebugInterceptor в инстанцията, която се генерира от @Component.

1-1. среда за изпълнение

Бих искал да опиша използвания Jar и версия, тъй като може да има малки разлики в зависимост от средата.

Версия на spring aopspring-aop-5.1.4.RELEASE.jar
Версия на пролетния бобspring-beans-5.1.4.RELEASE.jar
Версия на библиотеката за изход на дневникаslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Необходима работа.

Необходимата работа е следната.

  • Създаване на инстанция с @Component.
  • Дефиниране на AOP в applicationContext.xml
  • Промяна на настройките за изход на дневника

2. монтаж

Сега бих искал да го приложа на практика.

2-1. Създаване на инстанция с @Component.

Подгответе клас с "@Component", деклариран по следния начин. Изпълнете само "return", тъй като искате да видите само AOP.

TestAop.java


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

        return;

    }

}

2-2. Дефиниране на AOP в applicationContext.xml

Настройте AOP, за да инжектирате процеса. Червените области са тези, които са от значение за ПДП.

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">
~съкращение~
    <!-- Тестване на 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' се записва по следния начин.

pointcut="execution(* име на пакета.име на класа.име на метода(..))"

В горния пример тя ще бъде следната.

・име на пакета:com.example

・име на класа:TestAop

・име на метода:testMethod

Ако искате да го приложите към всички методи, се прилага следното.

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

2-3. Промяна на настройките за изход на дневника

Променете нивото на водене на дневник само за DebugInterceptor, тъй като нивото на водене на дневник, описано в DebugInterceptor, е "TRACE". Областите в червено са тези, които трябва да бъдат зададени. Останалите настройки могат да се въвеждат произволно.

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>

Погледнах блоговете на някои други хора, когато го създавах, и някои от тях твърдяха, че изходът трябва да се извежда на ниво на дневника DEBUG, но в случая на "spring-aop-5.1.4.RELEASE.jar" изглежда, че изходът не се извежда, освен ако не е на ниво на дневника TRACE.

Ако конфигурацията би трябвало да работи, но по някаква причина дневниците не се извеждат, опитайте да промените нивото на дневника на TRACE.

2-4. Резултат.

Ако извикате testMethod в TestAop.java с горните настройки, трябва да се изведе следният журнал. Дневникът е дълъг, затова изтрих няколко реда, но трябва да се извеждат по два реда за влизане и излизане, общо четири реда.

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. резюме

Ако не сте запознати с използването на DebugInterceptor, моля, обърнете се към него.

Благодарим ви, че гледахте до края.