如何使用@Pointcut指定带参数化注释的方法及其值

时间:2017-09-14 14:41:14

标签: java spring spring-mvc aop spring-aop

背景:

我正在使用Spring MVC开发一个Web应用程序。

我想创建一个在POST请求上执行而不在GET请求上执行的方面,因为我想注入阻止在完成HTML呈现之前发送的POST请求的逻辑。

@RequestMapping(value = "/aaa", method = RequestMethod.POST)
public String methodForPost(AnDto dto, Model model) {
    // the aspect should be executed on this method
}

@RequestMapping(value = "/bbb", method = RequestMethod.GET)
public String methodForGET(AnDto dto, Model model) {
    // the aspect shouldn't be executed on this method
}

问题:

  1. 如何使用参数化注释指定方法及其值@Pointcut
  2. 如何在Spring <aop:pointcut>的{​​{1}}中指定带参数化注释的方法及其值?

1 个答案:

答案 0 :(得分:1)

@Around(value="@annotation(RequestMapping)")
public Object display(ProceedingJoinPoint joinPoint, RequestMapping requestMapping ) throws Throwable {
    // You have access to requestMapping. From which you can get whether its get or post and decide to proceed or not.
}

更多信息http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-ataspectj-advice-params-passing

您可能需要将其扩展为仅拦截程序包中的Requestmapping。因为这会拦截您在项目中可能包含的每个RequestMappig,包括您可能正在使用的库所使用的RequestMappig,这是一种负担。