Rumah >Java >javaTutorial >Mengapa Kaedah Spring @Transactional Saya Gagal Apabila Dipanggil Dalam Kelas Yang Sama?

Mengapa Kaedah Spring @Transactional Saya Gagal Apabila Dipanggil Dalam Kelas Yang Sama?

Linda Hamilton
Linda Hamiltonasal
2024-12-19 14:34:10151semak imbas

Why Does My Spring @Transactional Method Fail When Called Within the Same Class?

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:

  1. Gunakan AspectJ: Dengan mengkonfigurasi Spring untuk digunakan AspectJ dan bukannya objek dinamik untuk AOP, kod akan berfungsi seperti yang diharapkan.
  2. Kod Refactor: Sebagai alternatif, faktorkan semula kod untuk memisahkan logik pengendalian pengguna kepada dua kelas. Ini membenarkan kaedah @Transactional dipanggil daripada objek lain, di mana AOP akan digunakan seperti yang dimaksudkan.
  3. Konfigurasikan AspectJ (Sokongan Warisan): Untuk versi Spring sebelum 3.0, anda perlu tambah konfigurasi AspectJ secara manual dalam XML Spring konfigurasi.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn