Spring (2.5) で AspectJ (1.6) をいじっているだけですが、適切に動作していないようです。以下を使用して「beans.xml」をセットアップしました。
<aop:aspectj-autoproxy/>
<bean id="testBean1" class="apackage.MyClass">
<bean id="aopBean1" class="apackage.AfterReturningExample"/>
正しい名前空間が設定され、他のいくつかの Bean は重要ではありません。単純な Bean を使用してアドバイスをテストします。
package apackage;
@Aspect
public class MyClass {
public MyClass()
{
}
public Boolean testAspectJ()
{
System.out.println("returning from MyClass.testAspectJ()");
return false;
}
}
そして、これは aop Bean です。
package apackage;
@Aspect
public class AfterReturningExample {
public AfterReturningExample(){}
@AfterReturning("execution(* apackage.MyClass.*(..))")
public void test() throws Exception{
System.err.println("\n\n#### After Returning MyClass.testAspectJ()\n\n");
}
}
最後に、これはテスト コードです (メイン メソッド内)。
ApplicationContext ctx = new ClassPathXmlApplicationContext("apackage/beans.xml");
MyClass bean = (MyClass) ctx.getBean("testBean1");
bean.testAspectJ();
出力は以下のみを印刷します。
returning from MyClass.testAspectJ()
奇妙なことに、ポイントカットに使用すると:
"execution(public * *(..))"
ログには、AfterReturningExample クラスの System.out.println が表示されます。私は何が欠けていますか?