spring aop 在Struts2的Action中的问题

charmw 2009-10-20 11:05:29
Struts2的action 继承actionsupport(该类实现了若干接口) 导致 在默认的情况下spring的AOP在生成该action的代理类时,使用的是JAVA的动态代理,而不是CGLIB。
这样就会出现一个问题,action中的一些方法(如set方法,get方法)在对应的代理类中不存在。执行报错。

请问这个问题该如何解决。
----------------------------------------------------------------------------------------
我觉得可以强制指定 以CGLIB的方式生成action的代理类。是过了好像不行。

我的目的是用aop的方式,为项目中的所有类的执行做日志。用的是after
...全文
270 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoruifeng_good 2009-10-20
  • 打赏
  • 举报
回复
cglib代理和jdk动态代理

1 如果目标对象实现了接口,默认情况下会使用jdk的动态代理实现AOP

2 如果目标对象实现了接口、可以强制使用cglib实现aop
加入 cglib-nodep.jar
加入 <aop:aspectj-autoproxy proxy-target-class="true"/>强制使用cglib

3 如果目标对象没有实现了接口,必须采用cglib库,spring会在jdk动态代理和cglib之间转换


jdk动态代理和cglib动态代理(字节码生成)区别
* jdk动态代理只能对实现了接口的类生成代理,而不能针对没有实现接口的类代理
* cglib是针对类实现代理、主要是对指定的类生成一个子类,覆盖了其中的方法
因为是继承。所以该类或方法最好不要声明成final,导致无法继承父类生成代理类
charmw 2009-10-20
  • 打赏
  • 举报
回复
up
charmw 2009-10-20
  • 打赏
  • 举报
回复
问题解决了,还是用的CGLIB
可以继承actionSupport。是我在配置文件里写错了。
但我还是有个疑问,在个一个<aop:config>中,如何指定不同的类用不同的代理方法。
比如说,action我用CGLIB,其他的我用Java的动态代理。
xiaozejun 2009-10-20
  • 打赏
  • 举报
回复
你在给struts2的action类时不继承actionSupport就行了
你让你自己新建的action实现action接口就行了啊

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧