Pengenalan AOP Spring

1. Pengenalan

Dalam tutorial ini, kami akan memperkenalkan AOP (Aspect Oriented Programming) dengan Spring dan mula memahami bagaimana kita dapat mula menggunakan alat yang kuat ini dalam senario praktikal.

Anda juga boleh memanfaatkan anotasi AspectJ ketika mengembangkan menggunakan Spring AOP tetapi dalam artikel ini, kami memfokuskan pada konfigurasi berasaskan Spring AOP XML.

2. Gambaran keseluruhan

AOP adalah paradigma pengaturcaraan yang bertujuan untuk meningkatkan modulariti dengan membenarkan pemisahan masalah silang. Ia melakukannya dengan menambahkan tingkah laku tambahan pada kod yang ada tanpa mengubah kod itu sendiri.

Sebaliknya, kita boleh menyatakan kod baru ini dan tingkah laku baru ini secara berasingan.

Rangka kerja AOP Spring membantu kami melaksanakan permasalahan rentas ini.

3. Pergantungan Maven

Mari mulakan dengan menambahkan pergantungan perpustakaan AOP Spring di pom.xml :

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

Versi ketergantungan terkini boleh diperiksa di sini.

4. Konsep dan Terminologi AOP

Mari kita bahas secara ringkas konsep dan terminologi khusus untuk AOP:

4.1. Objek Perniagaan

Objek perniagaan adalah kelas biasa yang mempunyai logik perniagaan biasa. Mari lihat contoh ringkas objek perniagaan di mana kita hanya menambah dua nombor:

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

Perhatikan bahawa kelas ini adalah kelas biasa dengan logik perniagaan dan tanpa anotasi yang berkaitan dengan musim bunga.

4.2. Aspek

Aspek adalah modularisasi keprihatinan yang merangkumi pelbagai kelas. Pembalakan bersatu boleh menjadi contoh keprihatinan silang.

Mari lihat bagaimana kita menentukan Aspek ringkas:

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, kami baru saja menentukan kelas Java sederhana yang mempunyai kaedah yang disebut afterReturn yang mengambil satu argumen dari Jenis Objek dan ia hanya log masuk nilai tersebut. Perhatikan bahawa walaupun AdderAfterReturnAspect kami adalah kelas standard, tanpa sebarang anotasi Spring.

Di bahagian seterusnya, kita akan melihat bagaimana kita dapat memasukkan Aspek ini ke Objek Perniagaan kita.

4.3. Titik gabung

A Joinpoint adalah titik semasa pelaksanaan program, seperti pelaksanaan kaedah atau pengendalian pengecualian.

Pada Spring AOP, JoinPoint selalu mewakili pelaksanaan kaedah.

4.4. Titik titik

Titik Titik adalah predikat yang membantu mencocokkan Nasihat untuk diterapkan oleh Aspek di JoinPoint tertentu .

Nasihat sering dikaitkan dengan ungkapan Pointcut dan berjalan di mana-mana Joinpoint yang dipadankan dengan Pointcut.

4.5. Nasihat

Nasihat adalah tindakan yang diambil oleh aspek di Joinpoint tertentu . Berbagai jenis nasihat termasuk nasihat "sekitar", "sebelum" dan "setelah" .

Pada musim bunga, Nasihat dimodelkan sebagai pencegat, mengekalkan rantai pemintas di sekitar Titik Join .

4.6. Objek dan Aspek Perniagaan Pendawaian

Mari kita lihat bagaimana kita dapat memasukkan objek Perniagaan ke Aspek dengan nasihat Selepas Kembali.

Di bawah ini adalah petikan konfigurasi yang akan kita letakkan dalam konfigurasi Spring standard dalam tag "" :

Seperti yang dapat dilihat, kami telah menentukan kacang sederhana yang disebut simpleAdder yang mewakili contoh Objek Perniagaan. Sebagai tambahan, kami membuat contoh Aspect yang disebut AdderAfterReturnAspect .

Sudah tentu, XML bukan satu-satunya pilihan kami di sini; seperti yang disebutkan sebelumnya, anotasi AspectJ juga disokong sepenuhnya.

4.7. Konfigurasi Sekilas

Tag aop: config digunakan untuk menentukan konfigurasi yang berkaitan dengan AOP. Di dalam tag konfigurasi , kami menentukan kelas yang mewakili aspek. Kami telah memberikannya rujukan mengenai aspek kacang "doAfterReturningAspect" yang kami buat.

Seterusnya, kami menentukan Titik Titik menggunakan tag titik titik . Titik titik yang digunakan dalam contoh di atas adalah pelaksanaan (* org.baeldung.logger.SampleAdder +. * (..)) yang bermaksud menerapkan nasihat mengenai sebarang kaedah dalam kelas SampleAdder yang menerima sebilangan argumen dan mengembalikan sebarang jenis nilai.

Seterusnya, kami menentukan nasihat yang ingin kami terapkan. Dalam contoh di atas, kami akan menerapkan nasihat selepas kembali yang ditentukan dalam Aspect AdderAfterReturnAspect kami dengan melaksanakan kaedah yang dinamakan afterReturn didefinisikan menggunakan kaedah atribut.

Nasihat ini dalam Aspect mengambil satu parameter jenis Objek. Parameter ini memberi kita kesempatan untuk melakukan tindakan sebelum dan / atau setelah panggilan metode sasaran. Dalam kes ini, kami hanya mencatat nilai pengembalian kaedah.

Spring AOP menyokong pelbagai nasihat menggunakan konfigurasi berasaskan anotasi - ini dan lebih banyak contoh boleh didapati di sini dan di sini.

5. Kesimpulan

Dalam tutorial ini, kami menggambarkan konsep yang digunakan dalam AOP dan contoh penggunaan modul AOP Spring. Sekiranya anda berminat untuk mengetahui lebih lanjut mengenai AOP, berikut adalah beberapa sumber:

  • Pengenalan kepada AspectJ
  • Melaksanakan Anotasi AOP Spring Custom
  • Pengenalan Titik Ekspresi pada Musim Bunga
  • Membandingkan Spring AOP dan AspectJ
  • Pengenalan Jenis Nasihat pada Musim Bunga

Pelaksanaan contoh-contoh ini dapat dijumpai dalam projek GitHub - ini adalah projek berasaskan Maven, jadi mudah untuk diimport dan dijalankan sebagaimana adanya.