Jak korzystać z DebugInterceptora Springa.
Data publikacji:19 stycznia 2021 r.
INFOMARTION > Jak korzystać z DebugInterceptora Springa.
Przegląd.
W tym rozdziale dowiesz się, jak używać DebugInterceptora Springa. Poniższa strona internetowa Spring pomogła mi zrozumieć tę koncepcję, ale trudno było mi zrozumieć, co dokładnie należy zrobić na podstawie samej strony, więc zweryfikowałem wyniki.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Spis treści
1. Co to jest DebugInterceptor?
DebugInterceptor to biblioteka, która wyprowadza logi za pomocą AOP. Konkretnie chodzi o następujące biblioteki (pliki jar). Wersja 5.1.4.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
Konkretny plik Java to "org.springframework.aop.interceptor.DebugInterceptor".
W skrócie, AOP jest techniką wstrzykiwania przetwarzania do instancji zarządzanych przez kontener DI Springa. Oficjalna nazwa AOP to Programowanie zorientowane aspektowo (Aspect Oriented Programming).
W tym przypadku chcemy wstrzyknąć DebugInterceptor do instancji, która jest generowana przez @Component.
1-1. środowisko realizacji
Chciałbym opisać używanego słoika i wersję, ponieważ w zależności od środowiska mogą występować niewielkie różnice.
Wersja programu spring aop | spring-aop-5.1.4.RELEASE.jar |
---|---|
Wersja fasolki wiosennej | spring-beans-5.1.4.RELEASE.jar |
Wersja biblioteki wyjściowej dziennika | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Wymagana praca.
Wymagana jest następująca praca.
- Utwórz instancję z @Component.
- Zdefiniuj AOP w pliku applicationContext.xml
- Zmiana ustawień wyjścia dziennika
2. montaż
Teraz chciałbym zastosować go w praktyce.
2-1. Utwórz instancję z @Component.
Przygotuj klasę z deklaracją "@Component" w następujący sposób. Wykonaj tylko polecenie 'return', ponieważ chcesz zobaczyć tylko AOP.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Zdefiniuj AOP w pliku applicationContext.xml
Skonfiguruj AOP, aby wstrzyknąć proces. Obszary zaznaczone na czerwono są istotne dla 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">
~streszczenie~
<!-- Testowanie 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' zapisuje się w następujący sposób.
pointcut="execution(* nazwa pakietu.nazwa klasy.nazwa metody(..))"
W powyższym przykładzie będzie to wyglądało następująco.
・nazwa pakietu:com.example
・nazwa klasy:TestAop
・nazwa metody:testMethod
Jeśli chcesz zastosować tę zasadę do wszystkich metod, zastosuj poniższą procedurę.
・pointcut="execution(* com.example.TestAop.*(..))"
2-3. Zmiana ustawień wyjścia dziennika
Zmień poziom logowania tylko dla DebugInterceptora, ponieważ poziomem wyjścia dziennika opisanym w DebugInterceptorze jest "TRACE". Obszary zaznaczone na czerwono to te, które wymagają ustawienia. Pozostałe ustawienia można wprowadzić dowolnie.
<?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>
Przeglądałem blogi innych osób podczas tworzenia tego projektu i niektórzy twierdzili, że dane wyjściowe powinny być wysyłane na poziomie dziennika DEBUG, ale w przypadku pliku 'spring-aop-5.1.4.RELEASE.jar' wygląda na to, że dane wyjściowe nie są wysyłane, chyba że na poziomie dziennika TRACE.
Jeśli konfiguracja powinna działać, ale z jakiegoś powodu dzienniki nie są wysyłane, spróbuj zmienić poziom dziennika na TRACE.
2-4. Wynik.
Po wywołaniu metody testMethod w pliku TestAop.java z wprowadzonymi wyżej ustawieniami powinien zostać wyświetlony następujący dziennik. Dziennik jest długi, więc usunąłem kilka wierszy, ale powinien zawierać po dwa wiersze dla poleceń Wejście i Wyjście, czyli w sumie cztery wiersze.
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. streszczenie
Jeśli nie wiesz, jak używać DebugInterceptora, zapoznaj się z tym dokumentem.
Dziękujemy, że oglądaliście do końca.
■INFORMATION
Kliknij tutaj, aby przejść do górnej strony INFORMACJI.
■PROFILE
Kliknij tutaj, aby zobaczyć profil.
■Dane kontaktowe.
W przypadku pytań dotyczących artykułu prosimy o kontakt tutaj.