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