java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list錯(cuò)誤解決辦法
java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list錯(cuò)誤解決辦法
玩web的SSH總會(huì)有些令你意想不到的exception,這里其中有很多事自己不小心,或者馬虎所造成。因此,解決的方案會(huì)各有不同,別人出現(xiàn)的異常解決方案對(duì)你的可能無(wú)效,就像上面的我報(bào)的異常一樣,百度了很多很多次,給我的答案無(wú)非就是在aop上加上一句,但是非常抱歉,我加上去無(wú)效!所以還是那句話,對(duì)于自己的異常,還是要自己解決。
首先說(shuō)明一下,我這次的練習(xí)的ssh結(jié)構(gòu)和異常所報(bào)的原因。
用的框架式struts2.2+hibernate4.2+spring4.0,容器室tomcat7.0.在Action中,我寫了一個(gè)基類BaseAction,繼承了ActionSupport,實(shí)現(xiàn)了ModelDriven接口,代碼如下:
----------
@Component
@Transactional
----------
public abstract class BaseAction<T> extends ActionSupport implements ModelDriven<T> {
private static final long serialVersionUID = 2719688501307297741L;
@Resource(name = "roleServiceImpl")
protected RoleService roleService;
@Resource(name = "departmentService")
protected DepartmentService departmentService;
@Resource(name = "userService")
protected UserService userService;
protected T model;
public BaseAction() {
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
@SuppressWarnings("unchecked")
Class<T> clazz = (Class<T>) pt.getActualTypeArguments()[0];
try {
model = clazz.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public T getModel() {
return model ;
}
}
這樣做的好處是,每個(gè)組件對(duì)應(yīng)的Action中只需要告訴BaseAction自己要實(shí)現(xiàn)的泛型,然后只需要完成自己的邏輯。對(duì)于每個(gè)Action要實(shí)現(xiàn)ActionSupport來(lái)講,這是一項(xiàng)基本的且容易想到的方案。
然后,在每個(gè)Action中調(diào)用service組件實(shí)現(xiàn)自己的功能,在每個(gè)Action中都使用了@Component(“departmentAction”),@Scope(“prototype”)注解,但是練習(xí)一測(cè)試,就會(huì)出現(xiàn)Java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list()異常,檢查之后發(fā)現(xiàn),原因是:
BaseAction是抽象的,在上面加了@Transactional是沒(méi)有意義的,
而@Transactional就是有spring管理,spring管理的對(duì)象要生成代理,而對(duì)于一個(gè)抽象的類,是不能被new成對(duì)象的,只有一個(gè)抽象類的具體實(shí)現(xiàn)類才有可能是被spring代理。
所以,去掉BaseAction上面的@Transactional,就是本題的原因了。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
RocketMQ4.5.2 修改mqnamesrv 和 mqbroker的日志路徑操作
這篇文章主要介紹了RocketMQ 4.5.2 修改mqnamesrv 和 mqbroker的日志路徑操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
InteliJ IDEA 設(shè)置eclipse快捷鍵 的圖文教程
本文通過(guò)圖文并茂的形式給大家介紹了InteliJ IDEA 設(shè)置eclipse快捷鍵 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下2018-06-06
jetty運(yùn)行時(shí)無(wú)法保存文件的解決方法
這篇文章主要為大家詳細(xì)介紹了jetty運(yùn)行時(shí)無(wú)法保存文件的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
java?JVM-clinit指令實(shí)現(xiàn)原理面試精講
這篇文章主要介紹了java?JVM-clinit指令實(shí)現(xiàn)原理面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
SpringBoot啟動(dòng)時(shí)運(yùn)行特定代碼的多種方式小結(jié)
SpringBoot提供了多種方式在應(yīng)用程序啟動(dòng)時(shí)運(yùn)行特定的代碼,包括CommandLineRunner、ApplicationRunner、@PostConstruct、InitializingBean、事件機(jī)制和自定義注解等,下面就來(lái)具體介紹一下2025-01-01
Java并發(fā)編程創(chuàng)建并運(yùn)行線程的方法對(duì)比
這篇文章主要為大家詳細(xì)介紹了Java并發(fā)編程創(chuàng)建并運(yùn)行線程的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03
Java語(yǔ)言實(shí)現(xiàn)非遞歸實(shí)現(xiàn)樹的前中后序遍歷總結(jié)
今天小編就為大家分享一篇關(guān)于Java語(yǔ)言實(shí)現(xiàn)非遞歸實(shí)現(xiàn)樹的前中后序遍歷總結(jié),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01

