【发布时间】:2014-05-12 11:33:05
【问题描述】:
我想在 Spring (3.2.3) @Controller 中的每个方法之前运行一些代码。我定义了以下内容,但它不会运行。我怀疑切入点表达式不正确。
调度程序-servlet.xml
<aop:aspectj-autoproxy/>
<bean class="com.example.web.controllers.ThingAspect"/>
c.e.w.c.ThingAspect
@Pointcut("execution(com.example.web.controllers.ThingController.*(..))")
public void thing() {
}
@Before("thing()")
public void doStuffBeforeThing(JoinPoint joinPoint) {
// do stuff here
}
【问题讨论】:
-
也许
@ControllerAdvice是您正在寻找的。span> -
它是 (a) 根本没有运行还是 (b) 某些方法没有运行?这将有助于诊断您的问题。
-
我不知道 ControllerAdvice 存在,但查看它用于将 ExceptionHandler、InitBinder 和 ModelAttribute 附加到多个控制器的文档。我一直在寻找在每个方法之前运行的东西,在我的例子中,这些方法都是 RequestMapping 注释的方法。目前,根本没有为任何方法调用 Aspect。我可以使用 Spring 拦截器,但 AOP 似乎非常适合这项任务。
-
我忘记用 (at)Aspect 注释我的方面类。然而,@kriegaex 确实发现了其他一些阻止它工作的东西。感谢您的帮助。
-
对于使用旧版本 Spring MVC(如 3.1 左右)的人,请参考 this,因为我在尝试在非常旧的代码库中引入表单控制器的分析时遇到了一段时间。
标签: java spring spring-mvc spring-aop pointcut