AspectJ编译器(ajc)vs加载时编织

时间:2011-04-19 14:22:05

标签: aspectj

这里有几个问题:

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

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

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

1 个答案:

答案 0 :(得分:13)

  1. ajc(编译时)只会更改受方面影响的类。请记住,ajc是Java编译器的扩展(确切地说,它基于Eclipse 3.3的JDT编译器)。因此,它将像普通的Java编译器一样编译所有Java类。然后它将另外编织受方面影响的所有类。如果您将方面与非方面分开编译,那么将不会进行编译时编织,并且您的方面不会产生任何影响。但是,您可以将方面放在非方面编译的方面路径上(如果您的非方面由ajc编译)。这将允许您的非方面由您的方面编织。
  2. CTW下的启动时间比LTW好很多,但是在加载所有类之后,速度差应该可以忽略不计。原因是在LTW下,所有类都在加载时编织。这意味着类加载需要额外的编织步骤,这在CTW下是不必要的。
  3. 否。如上所述,您可以将方面添加到第二个项目的方面路径中,然后在编译期间编辑它们。
  4. 有关Aspect路径的更多信息:

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

相关问题