ServiceFactoryBeanで作成された(ServiceLoaderでロードされた)Beanにアスペクトを適用する際に問題が発生しました。
私の春のコンテキストは次のようになります。
...
<aop:aspectj-autoproxy/>
<bean id="myBean"
class="org.springframework.beans.factory.serviceloader.ServiceFactoryBean"
p:serviceType="com.test.MyInterface"/>
<bean id="myAnotherBean"
class="com.test.MyAnotherBean"/>
私の側面は次のように定義されています。
@Aspect
public class MyAspect {
@Pointcut("bean(myBean)")
public void foo() {
}
@Pointcut("bean(myAnotherBean)")
public void bar() {
}
@Around("foo()")
public Object doFoo(final ProceedingJoinPoint jp) throws Throwable {
return timed(jp, "foo");
}
@Around("bar()")
public Object doBar(final ProceedingJoinPoint jp) throws Throwable {
return timed(jp, "bar");
}
private ThreadLocal<StopWatch> stopWatch = new ThreadLocal<StopWatch>();
private Object timed(final ProceedingJoinPoint jp, final String taskName) throws Throwable {
stopWatch.get().add(taskName);
try {
return jp.proceed();
} finally {
if (stopWatch.get() != null) {
stopWatch.get().stop(taskName);
}
}
}
}
何らかの理由で、アスペクトはmyAnotherBeanの呼び出しにのみ適用され、myBeanの呼び出しには適用されません。何か案は ?