どちらも Spring プロジェクトであり、それぞれに applicationContext.xml を持つ 2 つのサブプロジェクトで構成されるプロジェクトがあります。
1 つはフレームワーク プロジェクト (最終的に JAR になる) で、もう 1 つは実際のアプリケーション (最終的に WAR になり、JAR に依存し、JAR の applicationContext.xml を独自の 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 によってインポートされる) で AOP を有効にしました。
...
<context:spring-configured />
<context:component-scan base-package="com.mypackage" />
<aop:aspectj-autoproxy/>
...
フレームワーク プロジェクトでテストする場合、Spring Bean でパブリック メソッドを呼び出すと、アスペクトが期待どおりに実行されます。
上記のように、フレームワーク プロジェクトは依存関係としてアプリケーション プロジェクトに含まれますが、Spring Bean のアプリケーション プロジェクトで一致するメソッド (すべてのパブリック) を呼び出すと、アスペクトは実行されません。
また、アスペクトの XML 構成を使用してみました。それは同じ行動につながります。