gpt4 book ai didi

java - 使用 around advice 取消方法执行并在方面内手动执行此方法

转载 作者:行者123 更新时间:2023-11-30 02:57:27 25 4
gpt4 key购买 nike

是否有可能取消一个带有around advice的方法的执行,并在切面的方法内部执行它?

例子:我们有一个项目:

1 - 一个 Activity SenderActivity.java 。在这个 Activity 中,我们有一个返回字符串的方法 MethodA()

喜欢:

public static String MethodA(){
String string = "a string";
return string;
}

2 - 我们通过 aspect.aj 中的切入点捕获 MethodA() 的执行

喜欢:

pointcut pointcut_catchMethodA() : execution(static String MethodA());

周围的建议是:

String around() : pointcut_catchMethodA(){
//We return null or simply don't call the proceed()
return null;
}

所以在这里,每次尝试执行 MethodA() 时,around advice 都会取消它。

我想知道在这次取消之后,我是否可以做类似的事情:

public void MethodToCallMethodAInsideTheAspect(){

SenderActivity.MethodA();

}

因此,通过这种方式,我取消了对 MethodA() 的原始调用,并在我的 aspect.aj 中手动调用它。所以我希望 MethodA() 返回它的原始值。 (字符串 = “一个字符串”)。

这可能吗?或者如果有办法实现这个,那么请不要犹豫您的指导。

因为我尝试了这种实现,而当我想手动执行 SenderActivity.MethodA() 时,我的实现返回了空值。我认为它会围绕建议的值(value)返回。

最佳答案

我自己找到了解决方案:

这个架构确实有效,它只需要替换切入点:

来自

pointcut pointcut_catchMethodA() : execution(static String MethodA());

到:

pointcut pointcut_catchMethodA() : call(static String MethodA(..)) && !within(Aspect);

在这里,我们使用 within 因为我们不希望我们的方面捕获从方面发出的调用,即

public void MethodToCallMethodAInsideTheAspect(){

SenderActivity.MethodA();

}

所以这个调用不会被around advice捕获。因此,对 MethodA() 的原始调用已被周围建议取消,它由 MethodToCallMethodAInsideTheAspect() 手动调用

关于java - 使用 around advice 取消方法执行并在方面内手动执行此方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23043441/

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