Spring AOP не работает в Tomcat и tcserver
У меня есть аспект, который отлично работает, когда я запускаю его из модульного теста или через автономное приложение. Однако, когда я запускаю его как часть веб-приложения и размещаю его на Tomcat, аспекты не применяются.
Мой аспект выглядит как
public class MyAspect {
@Around("within(com.service..*)")
public Object doLogging(ProceedingJoinPoint pjp) throws Throwable {
//do something
Object obj = pjp.proceed();
//do something else
return obj;
}
}
3 ответа:
Я в состоянии решить эту проблему. Причина заключалась в том, что аспект обрабатывался контекстом веб-приложения, а не глобальным контекстом приложения, поэтому мне пришлось реструктурировать пару вещей. Я подробно описал шаги здесь
@seanizer Spring поддерживает внутри. Это правда, что он применяется только к методам и внутри него будет применяться к методам всех пакетов и субпакетов com.обслуживание. Подробности смотрите в справочной документации здесь
Update: я оставлю это, потому что это все еще частично допустимо, даже если это не помогло в вашем случае. Я отредактирую несколько мест, хотя правки помечены как
thisили this.
Если вы используете Spring AOP, он не может работать.пружина AOP только полностью поддерживаетexecution
точечный разрез.within
pointcut работает только тогда, когда он применяется к выполнению метода, для полной функциональностиwithin
вам понадобится AspectJ (только весенний AOP использует некоторые точечные разрезы AspectJ, но не AspectJ weaver). Либо через статическую компиляцию (обычно через Maven или Ant), либо через Load-Time-Weaving.Кроме того, в вашем классе отсутствует аннотация
@Aspect
.