4 Stimmen

Versuch, eine AspectJ-Pointcut-Signatur für alle Methoden, die eine Variable enthalten, zu finden

Ich möchte eine Verknüpfung erstellen, die mit jede Methode in meinem Webcontroller, die eine ModelMap enthält:

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

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

Mein Problem ist, dass dies nur auf Methoden mit NUR den ModelMap-Parameter, andere werden nicht abgeglichen, weil sie zu viele Parameter enthalten. Dies wird zum Beispiel aufgrund des Parameters "req" nicht abgefangen:

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

Gibt es eine Möglichkeit, alle Methoden mit einem ModelMap-Parameter abzustimmen, ohne einen Pointcut-Delegaten für jede mögliche Parameterkombination hinzufügen zu müssen?

4voto

ewernli Punkte 37122

Sie können Wildcards verwenden * ou .. um die Argumente auf flexible Weise auszudrücken.

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

参照 AspectJ: Parameter in einem Pointcut

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X