Pengantar Spring AOP

1. Perkenalan

Dalam tutorial ini, kami akan memperkenalkan AOP (Pemrograman Berorientasi Aspek) dengan Spring dan mulai memahami bagaimana kami dapat mulai menggunakan alat canggih ini dalam skenario praktis.

Anotasi AspectJ juga dapat dimanfaatkan saat mengembangkan menggunakan Spring AOP, tetapi dalam artikel ini, kami berfokus pada konfigurasi inti berbasis XML Spring AOP.

2. Ikhtisar

AOP adalah paradigma pemrograman yang bertujuan untuk meningkatkan modularitas dengan memungkinkan pemisahan masalah lintas sektoral. Ia melakukannya dengan menambahkan perilaku tambahan ke kode yang ada tanpa modifikasi dari kode itu sendiri.

Sebaliknya, kita dapat mendeklarasikan kode baru ini dan perilaku baru ini secara terpisah.

Kerangka AOP Spring membantu kami mengimplementasikan masalah lintas sektoral ini.

3. Ketergantungan Maven

Mari kita mulai dengan menambahkan dependensi library AOP Spring di pom.xml :

 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE    org.springframework.boot spring-boot-starter-aop  

Versi terbaru dari ketergantungan tersebut dapat diperiksa di sini.

4. Konsep dan Terminologi AOP

Mari secara singkat membahas konsep dan terminologi khusus untuk AOP:

4.1. Objek Bisnis

Objek bisnis adalah kelas normal yang memiliki logika bisnis normal. Mari kita lihat contoh sederhana dari objek bisnis di mana kita hanya menambahkan dua angka:

public class SampleAdder { public int add(int a, int b) { return a + b; } } 

Perhatikan bahwa kelas ini adalah kelas normal dengan logika bisnis dan tanpa anotasi terkait Spring.

4.2. Aspek

Aspek adalah modularisasi perhatian yang melintasi beberapa kelas. Penebangan terpadu bisa menjadi contoh perhatian lintas sektoral.

Mari kita lihat bagaimana kita mendefinisikan Aspek sederhana:

public class AdderAfterReturnAspect { private Logger logger = LoggerFactory.getLogger(this.getClass()); public void afterReturn(Object returnValue) throws Throwable { logger.info("value return was {}", returnValue); } } 

Dalam contoh di atas, kita baru saja mendefinisikan kelas Java sederhana yang memiliki metode bernama afterReturn yang mengambil satu argumen bertipe Object dan hanya memasukkan nilai itu. Perhatikan bahwa bahkan AdderAfterReturnAspect kami adalah kelas standar, bebas dari anotasi Musim Semi apa pun.

Di bagian selanjutnya, kita akan melihat bagaimana kita dapat menghubungkan Aspek ini ke Objek Bisnis kita.

4.3. Joinpoint

Sebuah Joinpoint adalah titik selama pelaksanaan program, seperti pelaksanaan metode atau penanganan pengecualian.

Di Spring AOP, JoinPoint selalu mewakili eksekusi metode.

4.4. Pointcut

Pointcut adalah predikat yang membantu mencocokkan Saran untuk diterapkan oleh Aspek di JoinPoint tertentu .

Advice sering dikaitkan dengan ekspresi Pointcut dan dijalankan di Joinpoint mana pun yang cocok dengan Pointcut tersebut.

4.5. Nasihat

Nasihat adalah tindakan yang diambil oleh suatu aspek di Joinpoint tertentu . Jenis nasihat yang berbeda mencakup nasihat "sekitar", "sebelum" dan "setelah" .

Di Spring, Advice dimodelkan sebagai interseptor, mempertahankan rantai interseptor di sekitar Joinpoint .

4.6. Objek dan Aspek Bisnis Perkabelan

Mari kita lihat bagaimana kita bisa menghubungkan objek Bisnis ke Aspek dengan saran After-Returning.

Di bawah ini adalah kutipan konfigurasi yang akan kami tempatkan di konfigurasi Spring standar di tag “” :

Seperti yang dapat dilihat, kita telah mendefinisikan kacang sederhana yang disebut simpleAdder yang mewakili sebuah instance dari Objek Bisnis. Selain itu, kami membuat instance dari Aspect yang disebut AdderAfterReturnAspect .

XML, tentu saja, bukan satu-satunya pilihan kami di sini; seperti yang disebutkan sebelumnya, anotasi AspectJ juga didukung penuh.

4.7. Konfigurasi Sekilas

Tag aop: config digunakan untuk menentukan konfigurasi terkait AOP. Di dalam tag config , kami mendefinisikan kelas yang mewakili suatu aspek. Kami telah memberinya referensi kacang aspek "doAfterReturningAspect" yang kami buat.

Selanjutnya, kami mendefinisikan Pointcut menggunakan tag pointcut . Pointcut yang digunakan dalam contoh di atas adalah eksekusi (* org.baeldung.logger.SampleAdder +. * (..)) yang berarti menerapkan saran pada metode apa pun dalam kelas SampleAdder yang menerima sejumlah argumen dan mengembalikan jenis nilai apa pun.

Selanjutnya, kami menentukan saran mana yang ingin kami terapkan. Dalam contoh di atas, kami akan menerapkan saran setelah pengembalian yang ditentukan dalam Aspect AdderAfterReturnAspect kami dengan menjalankan metode bernama afterReturn yang ditentukan menggunakan metode atribut.

Saran dalam Aspect ini menggunakan satu parameter tipe Object. Parameter memberi kita kesempatan untuk mengambil tindakan sebelum dan / atau setelah panggilan metode target. Dalam kasus ini, kita hanya mencatat nilai kembalian metode tersebut.

Spring AOP mendukung beberapa saran menggunakan konfigurasi berbasis anotasi - contoh ini dan lainnya dapat ditemukan di sini dan di sini.

5. Kesimpulan

Dalam tutorial ini, kami mengilustrasikan konsep yang digunakan dalam AOP dan contoh penggunaan modul AOP Spring. Jika Anda tertarik untuk mengetahui lebih lanjut tentang AOP, berikut beberapa sumbernya:

  • Pengantar AspectJ
  • Menerapkan Anotasi AOP Musim Semi Kustom
  • Pengantar Ekspresi Pointcut di Musim Semi
  • Membandingkan Spring AOP dan AspectJ
  • Pengantar Jenis Saran di Musim Semi

Implementasi contoh-contoh ini dapat ditemukan di proyek GitHub - ini adalah proyek berbasis Maven, jadi semestinya mudah untuk mengimpor dan menjalankan apa adanya.