Как использовать отладочный перехватчик Spring.
Дата публикации:19 января 2021 года.
INFOMARTION > Как использовать отладочный перехватчик Spring.
Обзор.
Речь пойдет о том, как использовать отладочный перехватчик Spring. Следующий сайт Spring помог мне понять концепцию, но из одного только сайта было трудно понять, что именно нужно делать, поэтому я фактически проверил результаты.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Оглавление
1. Что такое отладочный перехватчик?
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. Официальное название АОП - Аспектно-ориентированное программирование.
В данном случае мы хотим внедрить 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
Пожалуйста, нажмите здесь для получения профиля.
■Контактная информация.
Для получения информации о статье, пожалуйста, свяжитесь с нами здесь.