Kevin Van Ryckegem
Kevin Van Ryckegem

Reputation: 1945

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

I have the following pointcut defined, which works great.

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

However, if I change it to the following pointcut, removing the response variable and replacing it with ..:

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

The pointcut does not have any markers and never gets executed, strangely.

Any idea why this would be happening?

Upvotes: 2

Views: 131

Answers (1)

ekem chitsiga
ekem chitsiga

Reputation: 5753

This is due to the first part of your composed pointcut i.e args(req). It matches a method which takes a single argument.

The second part i.e execution(org.springframework.web.servlet.ModelAndView org.springframework.web.servlet.mvc.Controller+.*(javax.servlet.http.HttpServletRequest, ..))

matches a method which has at least one argument of type HttpServletRequest.

However Controller interface method handleRequest takes two arguments.

Change this part args(req) of the pointcut to args(req,..)

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

Upvotes: 2

Related Questions