在带有Spring的@Controler方法上使用@BebeFor方面不起作用 [英] Using @Before aspect on @Controller methods with Spring doesn't work

查看:0
本文介绍了在带有Spring的@Controler方法上使用@BebeFor方面不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用Spring3的Web应用程序,其中控制器使用@Controller进行注释。控制器的公共方法使用@RequestMap进行注释。这完全可以正常工作。

现在我想在调用控制器中的任何公共方法之前进行检查。我已经使用PointCut表达式创建了一个@Being方面,该表达式选择用@RequestMap注释的所有控制器方法。我已经使用

注册了方面
<aop:aspectj-autoproxy>
    <aop:include name="myAspect"/>
</aop:aspectj-autoproxy>

问题是,当我启动应用程序并请求某个控制器处理的某个URL时,我收到以下错误消息:

"处理程序XXX没有适配器:您的处理程序是否实现了类似于控制器的受支持接口?"

这样控制器就不再工作了。有谁有办法解决这个问题吗?

推荐答案

肖恩·帕特里克·弗洛伊德是对的。还有一种方法:从Spring Proxy AOP切换到CGILib。

来自Spring引用:

可以强制使用 CGLIB,在这些(希望是罕见的)情况下 您需要建议一种方法, 未在接口上声明,或者 其中您需要传递一个代理 对象绑定到作为具体类型的方法。

http://static.springsource.org/spring/docs/3.0.x/reference/aop.html#aop-autoproxy-force-CGLIB

强制使用CGLIB代理集 代理目标类的值 [2-0]> 元素设置为True:<aop:config proxy-target-class="true">

要在使用@AspectJ自动代理支持时强制CGLIB代理,请设置 的"Proxy-Target-Class"属性 <aop:aspectj-autoproxy>元素 设置为True:<aop:aspectj-autoproxy proxy-target-class="true"/>

btw:我建议使用AspectJ或Spring代理CGILib AOP。/

这篇关于在带有Spring的@Controler方法上使用@BebeFor方面不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆