Spring AOP не работает в Tomcat и tcserver - PullRequest
3 голосов
/ 05 ноября 2010

У меня есть аспект, который отлично работает, когда я запускаю его из модульного теста или через отдельное приложение.Однако когда я запускаю его как часть веб-приложения и размещаю его на 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 голосов
/ 05 ноября 2010

Я могу решить это. Причина была в том, что этот аспект обрабатывался контекстом веб-приложения, а не глобальным контекстом приложения, поэтому мне пришлось перестроить пару вещей. Я подробно описал шаги здесь

@ seanizer Spring поддерживает внутри. Это правда, что он применяется только к методам и внутри него будет применяться к методам всего пакета и подпакета com.service. Подробности смотрите в справочной документации здесь

1 голос
/ 05 ноября 2010

Обновление: Я оставлю это, потому что это все еще частично верно, даже если это не помогло в вашем случае.Я отредактирую несколько мест, однако, пометки помечаются как это или это .

Если вы используете Spring AOP, он не можетработа. только для Spring AOP полностью поддерживает execution pointcut.within pointcut работает только тогда, когда он применяется к выполнению методов , для полной функциональности within, вам потребуется AspectJ (Spring AOP использует только некоторые pointcut AspectJ, но неAspectJ ткач).Либо через статическую компиляцию (обычно через Maven или Ant ), либо через Load-Time-Weaving .

Кроме того, ваш класс пропускает@Aspect аннотация.

0 голосов
/ 13 сентября 2016

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

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

to servlet-mvc.xml?

...