gpt4 book ai didi

java - @AfterReturning(切入点) 与 @AfterReturning(值)

转载 作者:行者123 更新时间:2023-11-30 06:17:17 24 4
gpt4 key购买 nike

@AfterReturning(pointcut)@AfterReturning(value)有什么区别

@AfterReturning(pointcut = "execution(* my.java.model.Triangle.myTest*(param))", returning = "returnedString", argNames = "param,returnedString")
public void afterReturningAdvice(String param, String returnedString) {
System.out.println("Executing after function advice that accepts the input " + param + " and returns " + returnedString);
}

上述方法导致bean初始化失败;嵌套异常是 java.lang.IllegalArgumentException:::0 名称绑定(bind)错误仅允许在 target、this 和 args pcds 中。

将上面的代码替换为

后就可以正常工作了
@AfterReturning(value = "(* my.java.model.Triangle.myTest*(*))  && args(param)", returning = "returnedString", argNames = "param,returnedString")
public void afterReturningAdvice(String param, String returnedString) {
System.out.println("Executing after function advice that accepts the input " + param + " and returns " + returnedString);
}

值和切入点有什么区别

最佳答案

事实上,当使用切入点表达式时,您可以在指定时覆盖文学子句,您可以复制指定将建议从值绑定(bind)到切入点的位置的表达式,反之亦然。反之亦然,检查here

您会得到异常,因为 AfterReturning 仅隐式绑定(bind)返回值,如果您想绑定(bind)任何参数,则必须将 && args(param) 添加到第一个表达式:

@AfterReturning(pointcut = "execution(* my.java.model.Triangle.myTest*(String))  && args(param)" ..

请注意,我还将 execution(* my.java.model.Triangle.myTest*(param) 更改为 execution(* my.java.model.Triangle.myTest*(String )因为 execution (..) 与将参数绑定(bind)到通知无关,它只匹配方法执行连接点。

关于java - @AfterReturning(切入点) 与 @AfterReturning(值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48955420/

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