在Spring的@Controller方法上使用@Before方面不起作用

我有一个使用Spring

3的Web应用程序,其中的控制器使用@Controller进行了注释。控制器的公共方法以@RequestMapping注释。这工作得很好。

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

<aop:aspectj-autoproxy>

<aop:include name="myAspect"/>

</aop:aspectj-autoproxy>

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

因此,控制器不再起作用。有谁知道如何解决这个问题?

回答:

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

从Spring参考:

在那些需要建议在接口上未声明的方法或需要将代理对象作为具体类型传递给方法的情况下(在极少数情况下),可以强制使用CGLIB。

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

autoproxy-force-

CGLIB

要强制使用CGLIB代理,请将<aop:config> 元素的proxy-target-class属性的值设置为true:<aop:config

proxy-target-class="true">

要在使用@AspectJ自动代理支持时强制CGLIB代理,请将<aop:aspectj-autoproxy>元素的’proxy-target-

class’属性设置为true:<aop:aspectj-autoproxy proxy-target-class="true"/>

顺便说一句:我建议改用AspectJ或Spring Proxy CGILib AOP。 /

以上是 在Spring的@Controller方法上使用@Before方面不起作用 的全部内容, 来源链接: utcz.com/qa/434704.html

回到顶部