问题与方案中的LTW问题

时间:2015-05-07 23:05:58

标签: java aop 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;
   }


  }

1 个答案:

答案 0 :(得分:1)

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

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

@SuppressAjWarnings("adviceDidNotMatch")

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