【问题标题】:AspectJ compiler (ajc) vs load-time weavingAspectJ 编译器 (ajc) 与加载时编织
【发布时间】:2011-04-19 14:22:05
【问题描述】:

这里有几个问题:

  • ajc 是否会更改它编译的所有类(甚至是非方面的类)?如果我只编译方面类 ant 然后将它们与常见的类放在同一个类路径中怎么办?

  • ajc 编译的项目是否比使用加载时编织的项目执行得更快?

  • 如果我需要编写一个库,使用 AspectJ 进行跟踪,然后我希望这个库可以用于任何项目,该怎么办?在这种情况下,加载时编织是唯一的选择吗?

【问题讨论】:

    标签: aspectj


    【解决方案1】:
    1. ajc(编译时)只会更改受方面影响的类。请记住,ajc 是 Java 编译器的扩展(准确地说,它基于 Eclipse 3.3 的 JDT 编译器)。因此,它将像普通 Java 编译器一样编译所有 Java 类。然后它会另外编织​​受一个方面影响的所有类。如果您将方面与非方面分开编译,则不会进行编译时编织,并且您的方面不会有任何影响。但是,您可以将方面放在编译非方面的 方面路径 上(如果您的非方面是由 ajc 编译的)。这将使您的非方面与您的方面交织在一起。
    2. CTW 下的启动时间比 LTW 好很多,但是加载完所有类后,速度差异应该可以忽略不计。原因是在 LTW 下,所有类在加载时都是编织的。这意味着类加载需要额外的编织步骤,这在 CTW 下是不需要的。
    3. 没有。如上所述,您可以将切面添加到您的第二个项目的切面路径中,然后它们将在编译过程中被编织。

    更多关于方面路径:

    http://www.eclipse.org/aspectj/doc/released/devguide/ajc-ref.html

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多