【发布时间】:2014-02-14 12:23:38
【问题描述】:
我有点困惑 AspectJ 编译器 ajc 的工作原理。据我了解,在谈论 CTW 时,ajc 用于将方面编织到已编译的字节码中 - 即:.class 文件。
但是,当我查看 AspectJ (aspectj-maven-plugin) 的 maven-plugin 时,发现它是在 javac 编译器之前的 maven 的 generate-sources 阶段运行的。这意味着编译器在方面编织之后运行。这是有道理的,因为您可以编织 ITD、修改类成员等,Java 编译器需要了解这些信息才能编译任何依赖类。
所以如果是这样的话,并且ajc在javac之前运行,我假设ajc必须首先将所有java代码编译成字节码才能在任何方面进行编织。
所以问题是,如果ajc 已经完成了将所有java 代码编译成字节码的努力,那么为什么javac 还需要运行呢?为什么ajc 不是唯一需要的编译器?两者都运行不只是重复努力吗?另外,javac 如何处理ajc 已经编译好的类?它是否只是忽略它们,因为自生成 .class 文件以来源文件没有任何变化?
【问题讨论】:
标签: java aop aspectj javac compile-time-weaving