Spring AOP adalah salah satu bagian penting dari framework spring. Pada tahap yang sangat mendasar, kerangka pegas didasarkan pada IoC dan AOP. Dalam kursus resmi Spring ada slide di mana ia mengatakan:
AOP adalah salah satu bagian terpenting dari kerangka kerja.
Poin kunci untuk memahami cara kerja AOP di Spring adalah bahwa ketika Anda menulis sebuah Aspect with Spring, kami instrumen kerangka kerja dengan membangun proxy untuk objek Anda, dengan JDKDynamicProxy
jika kacang Anda mengimplementasikan antarmuka atau melalui CGLIB jika kacang Anda tidak mengimplementasikan apa pun antarmuka. Ingatlah bahwa Anda harus memiliki cglib 2.2 di jalur kelas Anda jika Anda menggunakan Spring sebelum versi 3.2. Mulai dari Spring 3.2 tidak ada gunanya karena cglib 2.2 termasuk dalam inti.
Kerangka kerja pada pembuatan kacang akan membuat proksi yang membungkus objek Anda dan menambahkan tanggung jawab lintas sektoral seperti keamanan, manajemen transaksi, pencatatan dan sebagainya.
Penciptaan proksi dengan cara ini akan diterapkan mulai untuk ekspresi pointcut yang instrumen kerangka untuk memutuskan kacang dan metode apa yang akan dibuat sebagai proxy. Nasihat akan lebih bertanggung jawab daripada kode Anda. Ingat bahwa dalam proses ini, titik potong hanya menangkap metode publik yang tidak dinyatakan sebagai final.
Sekarang, ketika di Spring AOP, penenunan Aspek akan dilakukan oleh wadah pada awal wadah, di AspectJ Anda harus melakukan ini dengan kompilasi pos kode Anda melalui modifikasi bytecode. Untuk alasan ini, menurut saya pendekatan Spring lebih sederhana dan lebih mudah dikelola daripada AspectJ.
Di sisi lain, dengan Spring AOP Anda tidak dapat menggunakan semua kekuatan AOP karena implementasi dilakukan melalui proxy dan bukan dengan melalui modifikasi kode Anda.
Seperti di AspectJ, Anda dapat menggunakan tenun waktu muat di SpringAOP. Anda dapat memanfaatkan fitur ini pada musim semi yang diimplementasikan dengan agen dan konfigurasi khusus, @EnabledLoadWeaving
atau dalam XML. Anda dapat menggunakan ruang nama sebagai contoh. Namun di Spring AOP Anda tidak dapat mencegat semua kasus. Misalnya, new
perintah tidak didukung di Spring AOP.
Namun di Spring AOP Anda bisa mendapatkan manfaat dari penggunaan AspectJ melalui penggunaan aspectof
metode pabrik di kacang konfigurasi pegas.
Karena Spring AOP pada dasarnya adalah proxy yang dibuat dari wadah, jadi Anda dapat menggunakan AOP hanya untuk kacang musim semi. Sementara dengan AspectJ Anda dapat menggunakan aspek di semua kacang Anda. Titik perbandingan lainnya adalah debug dan prediktabilitas perilaku kode. Dengan spring AOP, pekerjaan sudah dilakukan sebelumnya dari kompiler Java dan aspek adalah cara yang sangat keren untuk membuat proxy untuk kacang Spring Anda. Di AspectJ jika Anda memodifikasi kode, Anda perlu lebih kompilasi dan untuk memahami di mana aspek Anda ditenun menjadi sulit. Bahkan mematikan tenun di pegas lebih mudah: dengan pegas Anda menghapus aspek dari konfigurasi Anda, restart dan berfungsi. Di AspectJ Anda harus mengkompilasi ulang kode!
Dalam menenun waktu-waktu, AspectJ lebih fleksibel daripada Pegas karena Pegas tidak mendukung semua opsi AspectJ. Tetapi menurut saya Jika Anda ingin mengubah proses pembuatan kacang, cara yang lebih baik adalah mengelola login kustom di pabrik dan tidak dengan menenun waktu dari aspek yang mengubah perilaku operator baru Anda.
Saya berharap bahwa ini panorama AspectJ dan Spring AOP membantu Anda memahami perbedaan dari dua ramuan