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?
  2. montaż
  3. streszczenie

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 aopspring-aop-5.1.4.RELEASE.jar
Wersja fasolki wiosennejspring-beans-5.1.4.RELEASE.jar
Wersja biblioteki wyjściowej dziennikaslf4j-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.

TestAop.java


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

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

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>

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.