aspectj 中的 LTW 问题
Issue with LTW in aspectj
我正在尝试使用 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
选项以查看 pointcut/advice 是否匹配。
我正在尝试使用 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
选项以查看 pointcut/advice 是否匹配。