Попытка сопоставить сигнатуру AspectJ pointcut для любых методов, содержащих переменную - PullRequest
4 голосов
/ 08 февраля 2010

Я хочу создать pointcut, который соответствует любому методу в моем веб-контроллере, который содержит ModelMap:

pointcut addMenu(ModelMap modelMap) : 
    execution (public String example.web.MyController.*(..)) && args (modelMap);

before(ModelMap modelMap) : addMenu(modelMap) {
    // Do stuff with modelMap...
}

Моя проблема в том, что это сопоставляет только методы с ONLY параметром ModelMap, другие не сопоставляются, поскольку содержат слишком много параметров. Например, это не перехватывается из-за параметра req:

public String request(HttpServletRequest req, ModelMap modelMap) {
    // Handle request
}

Есть ли способ сопоставить все методы с параметром ModelMap, не добавляя делегат pointcut для каждой возможной комбинации параметров?

1 Ответ

4 голосов
/ 08 февраля 2010

Вы можете использовать подстановочные знаки * или .. для гибкого выражения аргументов.

pointcut addMenu(ModelMap modelMap) : 
    execution (public String example.web.MyController.*(..)) && args (*, modelMap);

См. AspectJ: параметр в pointcut

...