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