gpt4 book ai didi

java - Aspectj 中的 LTW 问题

转载 作者:行者123 更新时间:2023-11-30 08:12:54 25 4
gpt4 key购买 nike

我正在尝试使用 LTW 在这里创建一个周围的建议。 com.sample.core.Task 位于不同的库 jar 中。当我尝试编译时,我收到警告

 "advice defined in com.aop.MyAspect has not been applied [Xlint:adviceDidNotMatch]
MyAspect.java:19"

有什么想法有什么问题吗?另外,当我使用 javaagent 运行时,不会调用切入点。我错过了什么吗?

@Aspect
public class MyAspect {

@Pointcut("call(* com.sample.core.Task.*(..))")
public void callcs() {

}

@Around("com.test.callcs()")
public Object myTrace(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("hijacked method : " + joinPoint.getSignature().getName());

System.out.println("hijacked arguments : " + Arrays.toString(joinPoint.getArgs()));

Object retVal = null;
try {
retVal = joinPoint.proceed();
} finally {
//do nothing
}
return retVal;
}


}

最佳答案

对于加载时编织用例,我不希望在编译时应用该建议。对于加载时间编织,当系统加载涉及的类型时,建议将适用。

这意味着在编译时您通常会看到一个adviceDidNotMatch。您可以通过在建议中添加注释来抑制它:

@SuppressAjWarnings("adviceDidNotMatch")

现在,如果它不在加载时应用,那就不同了,并且与那里的警告无关。正如 Hakan 所评论的,您不需要限定切入点,它应该是 @Around("callcs()")。通过加载时编织,我可能会打开 aop.xml 中的 showWeaveInfo 选项来查看切入点/建议是否匹配。

关于java - Aspectj 中的 LTW 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30113112/

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