Cara menggunakan DebugInterceptor Spring.
Tanggal Publikasi:19 Januari 2021.
INFOMARTION > Cara menggunakan DebugInterceptor Spring.
Ikhtisar.
Ini adalah tentang cara menggunakan DebugInterceptor Spring. Situs web Spring berikut ini membantu saya memahami konsepnya, tetapi sulit untuk memahami apa yang sebenarnya harus dilakukan dari situs web saja, jadi saya benar-benar memverifikasi hasilnya.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Daftar Isi
1. Apa yang dimaksud dengan DebugInterceptor?
DebugInterceptor adalah pustaka yang mengeluarkan log oleh AOP. Secara khusus, pustaka berikut ini (file jar). Versi 5.1.4.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
File Java spesifiknya adalah "org.springframework.aop.interceptor.DebugInterceptor".
Secara singkat, AOP adalah teknik untuk menginjeksi pemrosesan ke dalam instance yang dikelola pada kontainer DI Spring. Nama resmi untuk AOP adalah Aspect Oriented Programming.
Dalam hal ini, kita ingin menginjeksikan DebugInterceptor ke dalam instance yang dihasilkan oleh @Component.
1-1. lingkungan implementasi
Saya ingin menjelaskan Jar dan versi yang digunakan, karena mungkin ada sedikit perbedaan, tergantung pada lingkungannya.
Versi aop musim semi | spring-aop-5.1.4.RELEASE.jar |
---|---|
Versi kacang musim semi | spring-beans-5.1.4.RELEASE.jar |
Versi pustaka keluaran log | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Pekerjaan yang dibutuhkan.
Pekerjaan yang diperlukan adalah sebagai berikut.
- Buat instance dengan @Component.
- Mendefinisikan AOP dalam applicationContext.xml
- Mengubah pengaturan output log
2. pemasangan
Sekarang saya ingin mengimplementasikannya dalam praktik.
2-1. Buat instance dengan @Component.
Siapkan kelas dengan "@Component" yang dideklarasikan sebagai berikut. Hanya jalankan 'return' karena Anda hanya ingin melihat AOP.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Mendefinisikan AOP dalam applicationContext.xml
Siapkan AOP untuk menginjeksi proses. Area merah adalah area yang relevan dengan 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">
~ringkasan~
<!-- Pengujian 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' ditulis sebagai berikut.
pointcut="execution(* nama paket.nama kelas.nama-metode(..))"
Dalam contoh di atas, akan menjadi seperti berikut ini.
・nama paket:com.example
・nama kelas:TestAop
・nama-metode:testMethod
Jika Anda ingin menerapkannya ke semua metode, yang berikut ini berlaku.
・pointcut="execution(* com.example.TestAop.*(..))"
2-3. Mengubah pengaturan output log
Ubah level logging hanya untuk DebugInterceptor, karena level output log yang dijelaskan di DebugInterceptor adalah "TRACE". Area berwarna merah adalah area yang perlu ditetapkan. Pengaturan lainnya bisa dimasukkan secara sewenang-wenang.
<?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>
Saya melihat beberapa blog orang lain saat membuatnya, dan beberapa menyatakan bahwa output harus dikeluarkan pada level log DEBUG, tetapi dalam kasus 'spring-aop-5.1.4.RELEASE.jar' tampaknya output tidak dikeluarkan kecuali pada level log TRACE.
Jika konfigurasinya seharusnya berfungsi, tetapi karena alasan tertentu log tidak dikeluarkan, coba ubah level log ke TRACE.
2-4. Hasil.
Jika Anda memanggil testMethod di TestAop.java dengan pengaturan di atas selesai, log berikut ini akan menjadi output. Lognya panjang, jadi saya menghapus beberapa baris, tetapi seharusnya mengeluarkan dua baris masing-masing untuk Entering dan Exiting, dengan total empat baris.
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. ringkasan
Jika Anda tidak terbiasa dengan penggunaan DebugInterceptor, silakan merujuk ke sana.
Terima kasih telah menonton sampai akhir.