请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

houcx

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1604|回复: 0

spring java.lang.NoSuchMethodException: $Proxy

[复制链接]

235

主题

237

帖子

1189

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1189
发表于 2015-10-31 13:43:39 | 显示全部楼层 |阅读模式
今天遇到这么一个异常,原来是对action进行了代理,这个是在spring的配置文件中的。所以,修改掉就正常了。

如何修改呢?
1. 加入代理的话,那么action 中就要有如下方法。

   <property name="transactionAttributes">
             <props>
                 <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
                 <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                 <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
                 <prop key="*">PROPAGATION_REQUIRED</prop>
             </props>
         </property>

2. 不配置代理。。

3. aop:config proxy-target-class="true">   
     <aop:aspect ref="rightFilter">   
         <aop:before method="rightFilter" pointcut="execution(* com.exdoit.action.Main.mainPage())"></aop:before>   
         <aop:after method="actionAfter" pointcut="execution(* com.exdoit.action.Main.mainPage())"></aop:after>   
     </aop:aspect>   
< /aop:config>  
< aop:config proxy-target-class="true">
  <aop:aspect ref="rightFilter">
   <aop:before method="rightFilter" pointcut="execution(* com.exdoit.action.Main.mainPage())"></aop:before>
   <aop:after method="actionAfter" pointcut="execution(* com.exdoit.action.Main.mainPage())"></aop:after>
  </aop:aspect>
< /aop:config>
起先是使用的annotation注解,然后出问题找不到 proxy-target-class 怎么注解就转成XML了.
java.lang.NoSuchMethodException: $Proxy...
先是代理对象里找不到方法.问题是解决了.
spring中代理对象的生成方式有2种,
1:利用jdk中的proxy实现,要求我们的被代理对象必须要去实现一个代理接口,代理对象和被代理对象本质是是实现了统一接口的两个对象
2:利用cglib来实现.被代理对象不需要去实现一个代理接口,被代理类和代理类之间本质是父子类的关系
proxy-target-class="true" 是指定由cglib来实现实现代理.
解决方法(2种):
1.取消继承 com.opensymphony.xwork2.ActionSupport 放弃这种方法
2.配置文件里的 <aop:config proxy-target-class="true" >....</aop:config>
继续AOP权限控制测试又报如下错误
Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
没有添加 cglib.jar 的包...你说没包你就跟下面的 NoClassDefFoundError 提示一样不得了..还自己来个什么 Add CGLIB to the class...搞半天才明白是少包了.
...继续
nested exception is java.lang.NoClassDefFoundError : Could not initialize class...
根据提示找包就是了.简单的问题.
运行结果是 AOP 拦截成功实现,但是action的变量没有输出结果...
如 public String nextPath;直接使用public声明取不到值(不用AOP前是可以直接通过public声明取值的).需要为变量加一个 get 方法:
public String getNextPath(){return nextPath;}
当请求一个变量的时候,转为寻找这个变量get方法的返回值.
估计应该是AOP的动态代理机制导致公共变量在action对应的方法中修改不会被实现

来自:http://blog.csdn.net/love_ubuntu/article/details/7869089
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|houcx ( 京ICP备15004793号  

GMT+8, 2019-9-20 19:56 , Processed in 0.058331 second(s), 29 queries .

Powered by houcx! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表