Как да използвате 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?
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 aop | spring-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.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Дефиниране на AOP в applicationContext.xml
Настройте AOP, за да инжектирате процеса. Червените области са тези, които са от значение за ПДП.
<?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". Областите в червено са тези, които трябва да бъдат зададени. Останалите настройки могат да се въвеждат произволно.
<?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, моля, обърнете се към него.
Благодарим ви, че гледахте до края.
■INFORMATION
Моля, кликнете тук, за да преминете към горната страница на ИНФОРМАЦИЯТА.
■PROFILE
■Данни за контакт.
За запитвания относно статията, моля, свържете се с нас тук.