Apa Yang Berlaku Apabila Anda Menggunakan @Transactional?
Apabila anda menganotasi kaedah dengan @Transactional, Spring mencipta kelas proksi untuk kelas beranotasi. Kelas proksi ini memintas panggilan kaedah luaran dan menggunakan gelagat transaksi kepada mereka.
Pemintasan Kelas Proksi
Kelas proksi mengandungi pelaksanaan kaedah yang diisytiharkan dalam kelas beranotasi. Apabila panggilan kaedah luaran dibuat, ia diubah hala ke kelas proksi dan bukannya kelas asal. Kelas proksi kemudiannya boleh melakukan sebarang pra dan pasca pemprosesan yang diperlukan di sekitar panggilan kaedah, termasuk pengurusan urus niaga.
Pertimbangan Seruan Sendiri
Mekanisme pengurusan transaksi Spring sahaja memintas panggilan kaedah luaran. Ini bermakna bahawa seruan sendiri, di mana kaedah dalam objek sasaran memanggil kaedah lain dalam objek yang sama, tidak akan memulakan transaksi secara automatik. Ini disebabkan fakta bahawa invokasi sendiri memintas mekanisme proksi.
Kelas Proksi Kelihatan
Kelas proksi yang dijana boleh dilihat menggunakan refleksi. Anda boleh mengakses maklumatnya dengan introspeksi kelas sasaran dan mendapatkan semula kelas yang diisytiharkan. Kelas proksi biasanya diakhiri dengan "$Proxy".
Mengapa Panggilan Luaran Sahaja?
Sebab mengapa hanya panggilan kaedah luaran yang sedang diuruskan adalah untuk mengelakkan pengulangan tak terhingga . Jika dakwaan sendiri turut memulakan urus niaga, ini boleh membawa kepada situasi di mana kaedah memulakan urus niaga baharu, kemudian memanggil dirinya sendiri dan memulakan urus niaga lain, dan seterusnya, mewujudkan gelung yang tidak berkesudahan.
Atas ialah kandungan terperinci Bagaimana Spring's @Transactional Annotation Menguruskan Transaksi dan Mengapa Ia Tidak Berfungsi dengan Self-Invocations?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!