Spring'in DebugInterceptor'ı nasıl kullanılır?


Yayın Tarihi:19 Ocak 2021.



INFOMARTION > Spring'in DebugInterceptor'ı nasıl kullanılır?

Genel bakış.

Bu, Spring'in DebugInterceptor'ının nasıl kullanılacağı hakkındadır. Aşağıdaki Spring web sitesi konsepti anlamama yardımcı oldu, ancak yalnızca web sitesinden tam olarak ne yapılacağını anlamak zordu, bu yüzden sonuçları gerçekten doğruladım.

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

İçindekiler

  1. DebugInterceptor nedir?
  2. montaj
  3. özet

1. DebugInterceptor nedir?

DebugInterceptor, AOP tarafından günlükleri çıkaran bir kütüphanedir. Özellikle, aşağıdaki kütüphaneler (jar dosyaları). Sürüm 5.1.4.

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

Belirli Java dosyası "org.springframework.aop.interceptor.DebugInterceptor" şeklindedir.

Kısaca AOP, Spring'in DI konteynerinde yönetilen örneklere işlem enjekte etmeye yönelik bir tekniktir. AOP'nin resmi adı Aspect Oriented Programming'dir.

Bu durumda, @Component tarafından oluşturulan örneğe bir DebugInterceptor enjekte etmek istiyoruz.

1-1. uygulama ortamı

Ortama bağlı olarak küçük farklılıklar olabileceğinden, kullanılan Jar ve sürümü açıklamak istiyorum.

Spring aop sürümüspring-aop-5.1.4.RELEASE.jar
Bahar fasulyesi versiyonuspring-beans-5.1.4.RELEASE.jar
Günlük çıktı kitaplığının sürümüslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Gerekli iş.

Yapılması gereken iş aşağıdaki gibidir.

  • Component ile bir örnek oluşturun.
  • AOP'yi applicationContext.xml'de tanımlayın
  • Günlük çıktı ayarlarını değiştirme

2. montaj

Şimdi bunu pratikte uygulamak istiyorum.

2-1. Component ile bir örnek oluşturun.

Aşağıdaki gibi bildirilen "@Component" ile bir sınıf hazırlayın. Yalnızca AOP'yi görmek istediğiniz için yalnızca 'return' komutunu çalıştırın.

TestAop.java


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

        return;

    }

}

2-2. AOP'yi applicationContext.xml'de tanımlayın

Süreci enjekte etmek için AOP'yi ayarlayın. Kırmızı alanlar AOP ile ilgili olanlardır.

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">
~KISALTMA~
    <!-- Spring AOP testi. -->
    <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' aşağıdaki gibi yazılır.

pointcut="execution(* paket adı.sınıf adı.yöntem-adı(..))"

Yukarıdaki örnekte, aşağıdaki gibi olacaktır.

・paket adı:com.example

・sınıf adı:TestAop

・yöntem-adı:testMethod

Bunu tüm yöntemlere uygulamak istiyorsanız, aşağıdakiler geçerlidir.

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

2-3. Günlük çıktı ayarlarını değiştirme

DebugInterceptor'da açıklanan günlük çıktısı düzeyi "TRACE" olduğundan, günlük düzeyini yalnızca DebugInterceptor için değiştirin. Kırmızıyla gösterilen alanlar ayarlanması gereken alanlardır. Ayarların geri kalanı isteğe bağlı olarak girilebilir.

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>

Bunu oluştururken diğer bazı kişilerin bloglarına baktım ve bazıları çıktının günlük seviyesi DEBUG'da çıkması gerektiğini belirtti, ancak 'spring-aop-5.1.4.RELEASE.jar' durumunda, günlük seviyesi TRACE olmadıkça çıktının çıkmadığı görülüyor.

Yapılandırma çalışıyor olmalı, ancak herhangi bir nedenle günlüklerin çıktısı alınmıyorsa, günlük düzeyini TRACE olarak değiştirmeyi deneyin.

2-4. Sonuç.

Yukarıdaki ayarlar tamamlanmış olarak TestAop.java'da testMethod'u çağırırsanız, aşağıdaki günlük çıktısı alınmalıdır. Günlük uzun olduğu için birkaç satırı sildim, ancak Giriş ve Çıkış için ikişer satır olmak üzere toplam dört satır çıktı vermelidir.

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. özet

DebugInterceptor kullanımına aşina değilseniz, lütfen buna başvurun.

Sonuna kadar izlediğiniz için teşekkür ederiz.