gpt4 book ai didi

java - AspectJ:this 和目标上下文

转载 作者:行者123 更新时间:2023-11-29 05:56:47 24 4
gpt4 key购买 nike

我正在使用 aspectj 来分析我的程序。目前我的方面看起来像:

@Aspect
public class InvokeAspect {
@Before("anyCall(t, s)")
public void processInvocation(JoinPoint point, JoinPoint.EnclosingStaticPart enclosingStatic, Object t, Object s){
System.out.println("***");
System.out.println("Invoker: " + s.toString());
System.out.println("Invoker: " + enclosingStatic.getSignature().toLongString());
System.out.println("Invoked object: " + t.toString());
System.out.println("Invoked: " + point.getSignature().toLongString());
System.out.println("");
System.out.println("***");
}
@Pointcut("call(* *(..)) && !within(cz.cvut.kbss.odra..*) && target(t) && this(s)")
public void anyCall(Object t, Object s){}
}

一切都按预期工作,但是有什么方法可以说服 aspectj 使用方面,即使 thissource 不存在? (静态方法调用或从静态方法调用)。还是一定要写3个方面?

谢谢。

最佳答案

如果您愿意动态确定您的targetthis 对象,您也可以使用一个切入点+一个建议来完成。我用 AspectJ 语法写这个,因为我不喜欢 POJO 注释样式:

public aspect InvokeAspect {
pointcut anyCall() : call(* *(..)) && !within(cz.cvut.kbss.odra..*);

before() : anyCall() {
Object s = thisJoinPoint.getThis();
Object t = thisJoinPoint.getTarget();
// and so forth
}
}

现在您可以打印或记录您认为合适的任何内容。如果您想对它们调用诸如 toString() 之类的方法,请注意检查 st 是否存在空值。

关于java - AspectJ:this 和目标上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11794553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com