Spring aop 方面:使用“..”无法替换参数?

Spring aop aspect: using ".." not working to replace parameters?

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

@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, ..)))")

切入点没有任何标记,奇怪的是永远不会执行。

知道为什么会这样吗?

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

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

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

但是控制器接口方法 handleRequest 有两个参数。

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

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