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

wee*_*ens 8 aspectj

这里有几个问题:

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

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

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

And*_*erg 15

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

更多关于Aspect路径:

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