AspectJ を使用して、ロガー内のものを除いて、コードで行ったすべてのメソッド呼び出しをログに記録したいと考えています。
@Aspect
public class Logger
{
// Point Cuts
//-----------
@Pointcut("execution(* org.myDomain.*..*.*(..))")
public void selectAll(){}
@Pointcut("within(Logger) && call(* *(..))")
public void codeWithinAspect(){}
// Advices
//-----------
@Before("selectAll()")
public void adviceThatWorksFine(JoinPoint joinPoint)
{
System.out.print(joinPoint.getSignature().toString());
//Utils.printToConsole(joinPoint.getSignature().toString());
}
@Before("selectAll() && !codeWithinAspect")
public void adviceWithInfiniteLoop(JoinPoint joinPoint)
{
//System.out.print(joinPoint.getSignature().toString());
Utils.printToConsole(joinPoint.getSignature().toString());
}
}
クラスの最初のアドバイスは問題なく機能します (すべてのメソッド呼び出しをコンソールに書き込みます)。
リンク http://www.eclipse.org/aspectj/doc/released/faq.php#q:infiniterecursionで説明されているように、これは一般的な問題であることがわかりましたが 、ポイントカットの記述方法が理解できなかったため、無限ループになりました作成されません。
助けてください