Spring Aspect не выполняется, если он определен в другом JAR-файле.

У меня есть проект, состоящий из двух подпроектов, которые оба являются проектами Spring и имеют applicationContext.xml каждый.

Один из них — это фреймворк (который заканчивается как JAR), а другой — фактическое приложение (которое заканчивается как WAR и зависит от JAR и импортирует файл applicationContext.xml из JAR в свой собственный applicationContext.xml).

В проекте фреймворка я определил аспект для всех общедоступных методов.

@Aspect
@Configurable
public class MyAspect {

    @Autowired
    private SomeBean mBean;

    @Pointcut("execution(public * *(..))")
    public void anyPublicMethod() {
    }

    @Before("anyPublicMethod()")
    public void checkAuthorization(JoinPoint pJoinPoint) {
        mBean.doSomething();
    }
}

И я активировал АОП в applicationContext.xml фреймворка (который импортируется applicationContext.xml реального проекта приложения).

...
    <context:spring-configured />

    <context:component-scan base-package="com.mypackage" />

    <aop:aspectj-autoproxy/>
...

При тестировании в рамках проекта аспект выполняется, как и ожидалось, при вызове общедоступных методов в компонентах Spring.

Как указано выше, проект фреймворка включается в проект приложения в качестве зависимости, но этот аспект не выполняется при вызове методов сопоставления (любых общедоступных) в проекте приложения для любых компонентов Spring.

Я также пробовал использовать XML-конфигурацию аспекта. Это приводит к такому же поведению.

6
задан tobiasbayer 18 April 2012 в 09:17
поделиться