Spring aop方面:使用" .."不工作替换参数?

时间:2016-11-03 14:10:37

标签: spring spring-mvc spring-aop spring-web

我定义了以下切入点,效果很好。

@Pointcut("args(req, resp) && (execution(org.springframework.web.servlet.ModelAndView org.springframework.web.servlet.mvc.Controller+.*(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)))")

但是,如果我将其更改为以下切入点,请删除响应变量并将其替换为..

@Pointcut("args(req) && (execution(org.springframework.web.servlet.ModelAndView org.springframework.web.servlet.mvc.Controller+.*(javax.servlet.http.HttpServletRequest, ..)))")

切入点没有任何标记,也从未被执行过,奇怪的是。

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

这是由于你组成的切入点的第一部分,即args(req)。它匹配一个采用单个参数的方法。

第二部分即 execution(org.springframework.web.servlet.ModelAndView org.springframework.web.servlet.mvc.Controller+.*(javax.servlet.http.HttpServletRequest, ..))

匹配一个至少有一个类型为HttpServletRequest的参数的方法。

然而,Controller接口方法handleRequest有两个参数。

将切入点的此部分args(req)更改为args(req,..)

@Pointcut("args(req,..) && (execution(org.springframework.web.servlet.ModelAndView org.springframework.web.servlet.mvc.Controller+.*(javax.servlet.http.HttpServletRequest, ..)))")