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

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

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

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

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

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

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

1 ответ

Решение

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

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

Смотрите AspectJ: параметр в pointcut

Другие вопросы по тегам