Spring @Transactional Annotation on Private Methods
Sekiranya @Transactional anotation digunakan pada kaedah persendirian dalam Spring bean, ia tidak akan mempunyai sebarang kesan. Ini kerana penjana proksi, yang bertanggungjawab untuk mencipta proksi untuk Spring beans, mengabaikan kaedah persendirian semasa menjana proksi.
Contohnya, pertimbangkan Spring bean berikut:
public class Bean { public void doStuff() { doPrivateStuff(); } @Transactional private void doPrivateStuff() { } }
Apabila konteks aplikasi dibuat, proksi akan dibuat untuk kelas Bean. Walau bagaimanapun, anotasi @Transactional pada kaedah doPrivateStuff akan diabaikan dan kaedah tersebut tidak akan mempamerkan tetapan transaksi yang dikonfigurasikan.
Tingkah laku ini didokumenkan dalam Manual Spring bab 10.5.6:
When using proxies, you should apply the @Transactional annotation only to methods with public visibility. If you do annotate protected, private or package-visible methods with the @Transactional annotation, no error is raised, but the annotated method does not exhibit the configured transactional settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods.
Atas ialah kandungan terperinci Mengapa @Transactional Tidak Berfungsi pada Kaedah Spring Bean Persendirian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!