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?
  2. pemasangan
  3. ringkasan

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 semispring-aop-5.1.4.RELEASE.jar
Versi kacang musim semispring-beans-5.1.4.RELEASE.jar
Versi pustaka keluaran logslf4j-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.

TestAop.java


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

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

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>

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.