java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list错误解决办法

网友投稿 352 2023-06-25


java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list错误解决办法

java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list错误解决办法

玩web的SSH总会有些令你意想不到的exception,这里其中有很多事自己不小心,或者马虎所造成。因此,解决的方案会各有不同,别人出现的异常解决方案对你的可能无效,就像上面的我报的异常一样,百度了很多很多次,给我的答案无非就是在aop上加上一句,但是非常抱歉,我加上去无效!所以还是那句话,对于自己的异常,还是要自己解决。

首先说明一下,我这次的练习的ssh结构和异常所报的原因。

用的框架式struts2.2+hibernate4.2+spring4.0,容器室tomcat7.0.在Actionhttp://中,我写了一个基类BaseAction,继承了ActionSupport,实现了ModelDriven接口,代码如下:

----------

@Component

@Transactional

----------

public abstract class BaseAction extends ActionSupport implements ModelDriven {

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 clazz = (Class) pt.getActualTypeArguments()[0];

try {

model = clazz.newInstance();

} catch (Exception e) {

throw new RuntimeException(e);

}

}

public T getModel() {

return model ;

}

}

这样做的好处是,每个组件对应的Action中只需要告诉BaseAction自己要实现的泛型,然后只需要完成自己的逻辑。对于每个Action要实现ActionSupport来讲,这是一项基本的且容易想到的方案。

然后,在每个Action中调用service组件实现自己的功能,在每个Action中都使用了@Component(“departmentAction”),@Scope(“prototype”)注解,但是练习一测试,就会出现Java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list()异常,检查之后发现,原因是:

BaseAction是抽象的,在上面加了@Transactional是没有意义的,

而@Transactional就是有spring管理,spring管理的对象要生成代理,而对于一个抽象的类,是不能被new成对象的,只有一个抽象类的具体实现类才有可能是被spring代理。

所以,去掉BaseAction上面的@Transactional,就是本题的原因了txyyqOms。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java在文件尾部追加内容的简单实例
下一篇:学习SpringMVC——国际化+上传+下载详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~