gpt4 book ai didi

java - 我已经为基本包执行创建了一个切点(* com.blk.example.*.*.*)”但是@advice方法根本没有调用..?

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:28 25 4
gpt4 key购买 nike

AOP @Around 根本不调用基础包切点。下面是我正在使用的代码。它应该显示开始时间、结束时间、所用时间,但对于基础包中的任何 Controller 、服务方法,“AOP 方法”根本不会触发。

@Aspect
@Configuration
public class LoggerAOP {
private static final Logger logger = oggerFactory.getLogger(LoggerAOP.class);

@Around("execution(* com.example.platform.test.*.*.*(..))")
public void customAOPMetrics(ProceedingJoinPoint pjp) throws Throwable {

MDC.put("CorelationalId", UUID.randomUUID());
MDC.put("eventId", UUID.randomUUID());

logger.info(pjp.getSignature().getName() + " called with ");
logger.info(Arrays.toString(pjp.getArgs()));

long startTime = System.currentTimeMillis();
logger.info("Start time: " + startTime);

try {
pjp.proceed();

} catch (Exception ex) {
logger.error("Error occured: " + ex.getStackTrace());
}

long endTime = System.currentTimeMillis();
logger.info("End Time :" + endTime);
long timeTaken = endTime - startTime;
MDC.clear();
logger.info("Time taken: " + timeTaken);
}
}

最佳答案

@kriegaex: Yes, when I gave complete pkg for service, it's kicking

那么解释很简单:你的切入点没有捕获你期望它捕获的类和方法:

execution(* com.example.platform.test.*.*.*(..))

这将例如捕获

com.example.platform.test.foo.ClassA.methodX(..)
com.example.platform.test.bar.ClassB.methodY(..)

但不是

com.example.platform.test.ClassA.methodX(..)
com.example.platform.test.foo.bar.ClassA.methodX(..)

这是因为您使用 .*.*.* 给出了确切的子包数量 (1) + 类名 + 方法名。这样你会更灵活:

execution(* com.example.platform.test..*(..))

它将捕获以上所有内容,因为..说:无论中间有多少个包和类名,都会捕获com.example.platform.test中的所有方法以及所有子包。

关于java - 我已经为基本包执行创建了一个切点(* com.blk.example.*.*.*)”但是@advice方法根本没有调用..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57644655/

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