Ich möchte Code vor jeder Methode in einem Spring (3.2.3) @Controller ausführen. Ich habe Folgendes definiert, aber es wird nicht ausgeführt. Ich vermute, dass der Pointcut Ausdruck falsch ist.Spring AOP Pointcut für alle Methoden in einem Controller
Dispatcher-servlet.xml
<aop:aspectj-autoproxy/>
<bean class="com.example.web.controllers.ThingAspect"/>
c.e.w.c.ThingAspect
@Pointcut("execution(com.example.web.controllers.ThingController.*(..))")
public void thing() {
}
@Before("thing()")
public void doStuffBeforeThing(JoinPoint joinPoint) {
// do stuff here
}
Vielleicht ein [ '@ ControllerAdvice'] (http://docs.spring.io/spring/docs/4.0.3.RELEASE/javadoc-api/org/springframework/web/bind/annotation/ControllerAdvice .html) ist was du suchst. –
Wird (a) überhaupt nicht oder (b) für einige Methoden nicht ausgeführt? Dies würde helfen, Ihr Problem zu diagnostizieren. – Phil
Ich wusste nicht, dass ControllerAdvice existiert, aber wenn ich die Dokumentation betrachte, wird ExceptionHandler, InitBinder und ModelAttribute an mehrere Controller angehängt. Ich suchte nach etwas, das vor jeder Methode ausgeführt werden sollte, in meinem Fall sind alle annotierten Methoden von RequestMapping. Im Moment wird der Aspekt überhaupt nicht nach irgendwelchen Methoden aufgerufen. Ich könnte einen Spring Interceptor verwenden, aber AOP schien für diese Aufgabe ideal geeignet. – Goose