欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-11 17:19:37
java.lang.nosuchmethodexception: com.sun.proxy.$proxy58.list错误解决办法 玩web的ssh总会有些令你意想不到...

java.lang.nosuchmethodexception: com.sun.proxy.$proxy58.list错误解决办法

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

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

用的框架式struts2.2+hibernate4.2+spring4.0,容器室tomcat7.0.在action中,我写了一个基类baseaction,继承了actionsupport,实现了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 ;
  }
}

这样做的好处是,每个组件对应的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,就是本题的原因了。

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