java.lang.nosuchmethodException: com.sun.proxy. $ proxy58.list solusi kesalahan
Selalu ada beberapa pengecualian yang tidak terduga saat bermain SSH di web. Ada banyak hal yang Anda tidak berhati -hati atau ceroboh. Oleh karena itu, solusinya akan berbeda. Solusi yang ditemui orang lain mungkin tidak valid untuk Anda. Sama seperti pengecualian yang saya laporkan di atas, saya telah menggunakan Baidu berkali -kali, dan jawaban yang saya berikan kepada saya tidak lebih dari menambahkan kalimat ke AOP, tetapi saya sangat menyesal, saya menambahkannya ke yang tidak valid! Jadi hal yang sama benar, Anda masih harus menyelesaikan kelainan Anda sendiri.
Pertama, izinkan saya menjelaskan struktur SSH dan alasan pengecualian dalam praktik saya kali ini.
Struts2.2+hibernate4.2+spring4.0, ruang wadah tomcat7.0. Dalam tindakan, saya menulis basa kelas dasar, mendukung tindakan yang diwarisi, dan mengimplementasikan antarmuka ModelDriven. Kodenya adalah sebagai berikut:
----------@Component@Transactional ---------- Basis kelas abstrak publik <T> Memperluas ActionSupport mengimplementasikan ModelDriven <T> {private static final long serialversionuid = 2719688501307297741L; @Resource (name = "RoleserviceImpl") RoleService Roleservice yang dilindungi; @Resource (name = "DepartmentService") Departemen Layanan Departemen yang Dilindungi; @Resource (name = "UserserService") UserServerService yang dilindungi; model T yang dilindungi; basa publik () {parameterizedType pt = (parameterizedType) this.getClass (). getGeneriCsuperclass (); @SuppressWarnings ("Uncecked") Class <T> clazz = (kelas <T>) pt.getActualTypeARGUMP () [0]; coba {model = clazz.newInstance (); } catch (Exception e) {lempar runtimeException baru (e); }} public t getModel () {return model; }} Keuntungan dari ini adalah bahwa tindakan yang sesuai dari masing -masing komponen hanya perlu memberi tahu basa generik yang ingin diterapkannya, dan kemudian Anda hanya perlu menyelesaikan logika Anda sendiri. Agar setiap tindakan mengimplementasikan tindakan yang mendukung, ini adalah solusi dasar dan mudah dipikirkan.
Kemudian, dalam setiap tindakan, komponen layanan dipanggil untuk mengimplementasikan fungsinya sendiri. Dalam setiap tindakan, @Component ("DepartmentAction") dan @scope ("prototipe") anotasi digunakan. Namun, begitu Anda mempraktikkan tes, java.lang.nosuchmethodException: com.sun.proxy. $ Proxy58.list () Pengecualian akan muncul. Setelah memeriksa, ditemukan bahwa alasannya adalah:
Basa abstrak, tidak masuk akal untuk menambahkan @transactional ke dalamnya.
@Transactional dikelola oleh Spring. Objek yang dikelola oleh Spring harus dihasilkan sebagai agen. Untuk kelas abstrak, itu tidak bisa menjadi baru menjadi suatu objek. Hanya kelas implementasi konkret dari kelas abstrak yang dapat diproksi oleh Spring.
Oleh karena itu, menghapus @transactional pada basa adalah alasan untuk pertanyaan ini.
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!