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?
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 versiyonu | spring-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.
@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.
<?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.
<?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.
■INFORMATION
BİLGİ üst sayfasına gitmek için lütfen buraya tıklayınız.
■PROFILE
Profil için lütfen buraya tıklayınız.
■İletişim bilgileri.
Makaleyle ilgili sorularınız için lütfen bizimle buradan iletişime geçin.