Using @Before aspect on @Controller methods with Spring doesn#39;t work(在带有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方面不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!