SpringAOP拦截struts2的action的一点心得

来源:互联网 发布:二次安防用哪个网络 编辑:程序博客网 时间:2024/06/14 05:11

因为要搞细粒度的方法权限控制,spring的AOP今天算了把老夫彻底搞的无语了,因为项目中dao层存在了spring的transaction注解,老是报classnotfoundexception,网上找了一大堆资料,各种问题排查完了,发现毛用都没有,后来想着会不会是cglib的问题,于是去掉了强制cglib的配置声明,resin启动终于不报错了。

可是在进入action的时候,发现还是有问题,com.sun.$proxy27.XX(对应aspect的那个action的method)出现methodnotfoundexception,这回彻底凌乱了,回去找cglib的官方文档,蓦然回首啊,这尼玛我手贱早干嘛去了,发现cglib的2和3版本存在差异,而对目前spring(我用的是3.2M1)和整合进去的asm来说,他就认识2的,于是换成cglib-nod-2的版本,强制使用cglib代理,这回终于没问题啦,不过后来想想aspect拦截action层好像不太符合美感,就换成拦截service层,action使用struts的interceptor,两个一起上,aspect用于拦截权限和方法后做异常日志,interceptor用来做ip、账号的拦截,这回OK啦。

另外,项目中遇到一个蛮搞笑的问题,貌似如果对实现类使用@Service注解,@transcation偶尔会报错,改成@component就没问题了,可能是datasource不能放在service注入导致偶尔识别不了,不过偶尔出现,这个理由不科学吖