Struts2的action 继承actionsupport(该类实现了若干接口) 导致 在默认的情况下spring的AOP在生成该action的代理类时,使用的是JAVA的动态代理,而不是CGLIB。
这样就会出现一个问题,action中的一些方法(如set方法,get方法)在对应的代理类中不存在。执行报错。请问这个问题该如何解决。
----------------------------------------------------------------------------------------
我觉得可以强制指定 以CGLIB的方式生成action的代理类。是过了好像不行。我的目的是用aop的方式,为项目中的所有类的执行做日志。用的是after

解决方案 »

  1.   

    你在给struts2的action类时不继承actionSupport就行了 
    你让你自己新建的action实现action接口就行了啊
      

  2.   

    问题解决了,还是用的CGLIB
    可以继承actionSupport。是我在配置文件里写错了。
    但我还是有个疑问,在个一个<aop:config>中,如何指定不同的类用不同的代理方法。
    比如说,action我用CGLIB,其他的我用Java的动态代理。
      

  3.   

    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,导致无法继承父类生成代理类