gpt4 book ai didi

java - 如何使方面在方法 AService.methodB() 上工作?

转载 作者:行者123 更新时间:2023-12-02 05:48:21 24 4
gpt4 key购买 nike

我定义一个方面如下:

@Component
@Aspect
public class ServiceMethodExecuteTimeAspect {

private Logger logger = LoggerFactory.getLogger(getClass());

@Pointcut("execution(* *.service.*.*(..))")
public void serviceMethod() {

}

@Around("serviceMethod()")
public Object executeTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
Object result;
MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();
Method method = signature.getMethod();
long executeTime;
long start;
try {
start = System.currentTimeMillis();
result = proceedingJoinPoint.proceed();
long end = System.currentTimeMillis();
executeTime = end - start;
logger.debug("ServiceMethodExecuteTimeAspect class method:{}#{} execute time is:{}", proceedingJoinPoint.getTarget().getClass().getName(), method.getName(), executeTime);
return result;
} catch (Throwable throwable) {
logger.error("ServiceMethodExecuteTimeAspect throw exception", throwable);
throw throwable;
}
}
}

我在服务包中有一个服务类,如下所示:

package example.service;
@Service
public class AService{
public void methodA(){methodB();}
public void methodB(){}
}

然后,创建时AService实例bean获取以下日志:

DEBUG o.s.a.f.CglibAopProxy - Unable to apply any optimizations to advised method: public example.AService.methodB();

然后是一个 Spring component调用AService.methodA()方法,我想查看 AService.methodA() 的日志执行时间并记录 AService.methodB() 的执行时间,但我发现它只是日志执行时间 AService.methodA()

换句话说我的ServiceMethodExecuteTimeAspect不适用于 AService.methodB()当我调用AService.methodA()时.

那么我怎样才能使方面在方法 AService.methodB() 上工作呢?当我调用AService.methodA()时方法?

最佳答案

有一种方法可以做到这一点,定义另一个Service,并将方法methodB()移动到它。

关于java - 如何使方面在方法 AService.methodB() 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56073810/

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