gpt4 book ai didi

java - joinPoint.proceed() 有什么作用?

转载 作者:行者123 更新时间:2023-12-01 14:21:08 28 4
gpt4 key购买 nike

这是我第一次接触 AOP。我有一个带有一个方面的 spring-boot 应用程序,一个记录器。搜索我得出的结论是 @Around 方法在方法之前和之后执行(我只在一种方法中调用它),这是对的吗?
在我的@Around 方法中间,你有一个 joinPoint.proceed() .如果我没记错的话,JoinPoint是我必须使用的对象来获取调用方面的方法的信息,但我无法理解实际在做什么!

这是我的代码:

@Around(value = "execution(* *(..)) && @annotation(Loggable)", argNames = "ProceedingJoinPoint, Loggable")
public Object logAround(ProceedingJoinPoint joinPoint, Loggable loggable) throws Throwable {

String methodArguments = loggable.printMethodArguments() ? Arrays.toString(joinPoint.getArgs()) : "[]";

long start = System.currentTimeMillis();
Object returnObject = joinPoint.proceed(); // continue on the
// intercepted method
long elapsedTime = System.currentTimeMillis() - start;

String returnValue = loggable.printReturn() && returnObject != null ? returnObject.toString() : "[]";

LOG.info("Logging method: {}.{} Method arguments: {}. Method return value: {}. Method execution time: {}",
joinPoint.getTarget().getClass().getName(), joinPoint.getSignature().getName(), methodArguments,
returnValue, elapsedTime);
return returnObject;
}

最佳答案

正如您所说,当您使用 @Around 时就好像你可以为所欲为之前 方法,然后 调用 方法,然后你可以在调用方法后做任何你想做的事情。

//Read file, Log , .... (Before method calling)
//Invoke the method (joinPoint.proceed)
//Write to the file, complete log, .... (After method calling)
调用阶段由 joinPoint.proceed() 完成 .

日志示例
1- 在调用方法之前登录
2- 调用或调用您在其上设置切入点的方法( proceed)
3-将日志保存到数据库或将其写入文件或发送,...
授权示例
在此示例中,使用 @Around ,您可以授权用户并确定他们可以使用该方法吗?
所以需要在方法调用前做授权过程, 如果授权是 true然后调用方法 如果不抛出异常,或者您可以登录。
1- 在调用方法之前授权用户
2- 如果授权是 true然后 调用 方法 ( joinPoint.proceed(); )

总结 , joinPoint.proceed();意味着您正在调用 set 方法,或调用它。

关于java - joinPoint.proceed() 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60155769/

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