Mengapa Transaksi Musim Bunga Gagal Apabila Dipanggil Dalam Kelas Yang Sama?
Panggilan Urus Niaga Dalam Kelas Yang Sama: Dilema Musim Bunga
Masalahnya
Pada Musim Bunga, kaedah transaksi biasanya dianotasi dengan @Transaction. Apabila kaedah transaksi digunakan, Spring mengurus kitaran hayat transaksi secara automatik, memastikan integriti data dalam menghadapi pengecualian. Walau bagaimanapun, tingkah laku yang tidak dijangka timbul apabila kaedah transaksi dipanggil dari dalam kelas yang sama. Transaksi itu nampaknya dipintas, menyebabkan pembangun menggaru kepala.
Punca: Had Proksi Dinamik
Spring menggunakan proksi dinamik (seperti CGLIB) untuk memintas panggilan kaedah dan menggunakan gelagat transaksi. Walau bagaimanapun, apabila kaedah transaksi memanggil kaedah transaksi lain dalam kelas yang sama, proksi dinamik dipintas. Ini kerana objek sasaran adalah sama dalam kedua-dua kes dan proksi hanya dicipta untuk penyebutan kaedah luaran.
Penyelesaian: Memeluk AspekJ atau Pemfaktoran Semula
Untuk menyelesaikan isu ini, anda perlu dua pilihan:
- Konfigurasikan AspectJ: Spring menyediakan mod pengendalian transaksi alternatif yang menggunakan AspekJ. Dengan menetapkan atribut mod kepada aspectj dalam anotasi @TransactionManagement anda, Spring akan menggunakan AspectJ untuk mengurus transaksi. Ini membolehkan panggilan transaksi dalam kelas yang sama berfungsi seperti yang diharapkan.
- Kod Refactor: Walaupun AspectJ menawarkan penyelesaian, ia mungkin bukan pendekatan yang paling elegan. Alternatif yang lebih bersih ialah memfaktorkan semula kod anda untuk memisahkan operasi transaksi ke dalam kelas yang berbeza. Dengan mempunyai kelas khusus mengendalikan setiap operasi transaksi, anda boleh mengelakkan masalah panggilan transaksi bersarang dalam kelas yang sama.
Petua Konfigurasi untuk AspectJ
Untuk mengkonfigurasi AspectJ untuk pengendalian transaksi, ikut langkah berikut:
- Tambah
pada konfigurasi Spring anda. -
Untuk versi Spring sebelum 3.0, tambah juga definisi kacang berikut pada konfigurasi anda:
<bean class="org.springframework.transaction.aspectj.AnnotationTransactionAspect" factory-method="aspectOf"> <property name="transactionManager" ref="transactionManager"></property> </bean>
Dengan memeluk AspectJ atau memfaktorkan semula kod anda, anda boleh mengatasi had pengendalian transaksi lalai Spring dan memastikan tingkah laku transaksi yang konsisten, walaupun untuk panggilan bersarang dalam masa yang sama kelas.
Atas ialah kandungan terperinci Mengapa Transaksi Musim Bunga Gagal Apabila Dipanggil Dalam Kelas Yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Java menyedari kemerdekaan platform melalui "Tulis sekali, jalankan di mana -mana" dan meningkatkan pemeliharaan kod: 1. Penggunaan semula kod tinggi dan mengurangkan pembangunan pendua; 2. Kos penyelenggaraan yang rendah, hanya satu pengubahsuaian yang diperlukan; 3. Kecekapan kerjasama pasukan tinggi adalah tinggi, mudah untuk perkongsian pengetahuan.

Cabaran utama yang dihadapi mewujudkan JVM pada platform baru termasuk keserasian perkakasan, keserasian sistem operasi, dan pengoptimuman prestasi. 1. Keserasian perkakasan: Adalah perlu untuk memastikan bahawa JVM dapat menggunakan set arahan pemproses platform baru, seperti RISC-V. 2. Keserasian sistem operasi: JVM perlu memanggil API sistem platform baru dengan betul, seperti Linux. 3. Pengoptimuman Prestasi: Ujian dan Penalaan Prestasi diperlukan, dan strategi pengumpulan sampah diselaraskan untuk menyesuaikan diri dengan ciri -ciri memori platform baru.

JavafxeffectivelyaddressesplatforminconsistencyiDevelopmentbybyusingapform-agnosticscenegraphandcsssstyling.1) Itabstractsplatformspecificsthroughascenegraph, memastikan konsistenRenderingAscrosswindows, macoS, danLinux.2)

JVM berfungsi dengan menukar kod Java ke dalam kod mesin dan menguruskan sumber. 1) Pemuatan Kelas: Muatkan fail kelas. Ke dalam memori. 2) Kawasan data runtime: Menguruskan kawasan memori. 3) Enjin Pelaksanaan: Mentafsirkan atau menyusun bytecode pelaksanaan. 4) Antara muka kaedah tempatan: Berinteraksi dengan sistem operasi melalui JNI.

JVM membolehkan Java melintasi platform. 1) Beban JVM, mengesahkan dan melaksanakan bytecode. 2) Kerja JVM termasuk pemuatan kelas, pengesahan bytecode, pelaksanaan tafsiran dan pengurusan ingatan. 3) JVM menyokong ciri -ciri canggih seperti pemuatan dan refleksi kelas dinamik.

Aplikasi Java boleh dijalankan pada sistem pengendalian yang berbeza melalui langkah -langkah berikut: 1) Gunakan kelas fail atau laluan untuk memproses laluan fail; 2) menetapkan dan mendapatkan pembolehubah persekitaran melalui System.getenv (); 3) Gunakan Maven atau Gradle untuk menguruskan kebergantungan dan ujian. Keupayaan merentas platform Java bergantung pada lapisan abstraksi JVM, tetapi masih memerlukan pengendalian manual ciri-ciri khusus sistem operasi tertentu.

Java memerlukan konfigurasi dan penalaan khusus pada platform yang berbeza. 1) Laraskan parameter JVM, seperti -XMS dan -XMX untuk menetapkan saiz timbunan. 2) Pilih strategi pengumpulan sampah yang sesuai, seperti ParallelGC atau G1GC. 3) Konfigurasikan perpustakaan asli untuk menyesuaikan diri dengan platform yang berbeza. Langkah -langkah ini dapat membolehkan aplikasi Java melakukan yang terbaik dalam pelbagai persekitaran.

Osgi, apachecommonslang, jna, danjvmoptionsareeffectiveforhandlingplatform-specificchallengesinjava.1) osgimanagesdependencyandisolatescomponents.2) ApachecommonslangprovideSutilityfung


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),
