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 3

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.

Как насчет перемещения

<context:component-scan base-package="com.*" />
<mvc:annotation-driven/>
<aop:aspectj-autoproxy />   

В servlet-mvc.в XML?