Panggilan Kaedah @Transaksi Spring Dalam Kelas Sendiri Gagal
Pengurusan transaksi deklaratif Rangka Kerja Spring menyediakan cara yang mudah untuk menentukan tingkah laku transaksi pada peringkat kaedah . Walau bagaimanapun, isu yang kelihatan pelik timbul apabila cuba memanggil kaedah transaksi dari dalam kelas yang sama.
Isunya
Dalam coretan kod yang disediakan, kaedah addUser ialah dianotasi dengan @Transactional dan direka bentuk untuk melaksanakan operasi pangkalan data. Dalam kaedah addUsers, terdapat percubaan untuk menggunakan addUser untuk setiap pengguna. Walau bagaimanapun, ia nampaknya tidak berfungsi seperti yang diharapkan.
Puncanya
Tingkah laku ini disebabkan oleh pengehadan dalam Spring AOP (Aspect-Oriented Programming), terutamanya apabila menggunakan objek dinamik dan perpustakaan CGLIB. CGLIB mencipta subkelas kelas sedia ada untuk melaksanakan pemintasan kaedah untuk AOP. Apabila kaedah digunakan dalam kelas yang sama di mana ia dicipta, seperti dalam kes ini, proksi AOP dipintas.
Penyelesaian
Untuk menyelesaikan isu ini , terdapat beberapa pendekatan yang mungkin:
Kesimpulan
Memahami batasan Spring AOP dan mencari penyelesaian yang sesuai untuk memanggil kaedah transaksi dari dalam kelas yang sama adalah penting untuk pengurusan transaksi yang berkesan dalam Aplikasi musim bunga. Pendekatan alternatif yang dibincangkan dalam artikel ini menyediakan cara untuk mengatasi halangan khusus ini.
Atas ialah kandungan terperinci Mengapa Kaedah Spring @Transactional Saya Gagal Apabila Dipanggil Dalam Kelas Yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!