代码之家  ›  专栏  ›  技术社区  ›  Manuel Selva

为什么我会收到“建议尚未应用”的警告?

  •  6
  • Manuel Selva  · 技术社区  · 14 年前

    为什么会出现以下代码:

     pointcut callsToList() : call(* List.*(..));
    
     before(List l) : callsToList() && target(l) {
      System.out.println("cool");
     }
    

    建议定义于 尚未应用 [Xlint:adviceDidNotMatch]

    eclipse aspectj plugin 当然,我的项目是一个aspectj项目。

    编辑:此外,我从ajdt插件提供的一个工作示例开始:

    pointcut callsToBeginTask() : call(void IProgressMonitor.beginTask(..)); 
    before() : callsToBeginTask() {
         System.out.println("cool");
    };
    

    我看不出有什么不同,除了这个例子在没有警告的情况下有效。。。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Andrew Eisenberg    14 年前

    当您希望AspectJ在OSGi环境中工作时,必须使用Equinox方面(也称Equinox编织)。这是一种与osgi类加载器一起工作的加载时编织形式。

    http://www.eclipse.org/equinox/incubator/aspects/equinox-aspects-quick-start.php

    当你的方面都是针对同一个项目,你不需要春分方面。常规的编译时编织可以做到,但是要跨越多个bundle/plugins,这是行不通的。

        2
  •  2
  •   Sean Patrick Floyd    14 年前

    我的猜测是,由于List是一个接口,您希望将调用与所有扩展类匹配,因此必须使用以下语法:

    pointcut callsToList() : call(* List+.*(..));
    

    更新:好的,我有这个版本:

    pointcut callsToList(List list) :
        call(* java.util.List+.*(..)) && target(list);
    
    Object around(List l) : callsToList(l) {
        // code here
    }
    

    before(List l) : callsToList(l) {
        // code here
    }