我想了解Aspect的工作原理。我来自C / C ++背景,魔术永远不会发生。
我知道您可以使用@Aspect
注释某些函数,然后记下Aspect实现,依此类推。但是,新代码是如何(以及在什么时间)生成的?
假设我没有编辑。我使用javacc
命令编译java类
这将生成.class
个文件。现在,假设使用Aspect注释java文件。我不应该再用Aspect以某种方式再次编译.class
文件来生成另一组.class
文件吗?
如果我的理解是正确的,那么这个双重编译步骤是如何在maven中完成的?还是春天?我找到了很多教程,它会告诉你在这里和那里添加什么来使事情有效但没有教程解释这些东西是如何实际工作的。
答案 0 :(得分:9)
是的,很容易说你是C ++人。没有javacc
这样的东西(如果你不是在谈论同名的Java Parser Generator),而是Java编译器叫javac
。 ; - )
正如Philipp Wendler已经指出的那样,Eclipse不仅仅是一个IDE,它是一个类似于Apache的组织,而且AspectJ已经被多年前采用作为其项目之一。这也有一个优点,即Eclipse IDE的AJDT(AspectJ开发工具)是您可以为任何IDE获得的最佳AspectJ支持,遗憾的是包括我最喜欢的IntelliJ IDEA,它几乎在所有方面都优于Eclipse IDE,除了它的AspectJ支持相当平庸。
对于次要主题来说太多了。至于你的主要问题,它并不适合StackOverflow,因为它是一个论坛问题,而不是一个需要解决方案的具体编程问题。无论如何,我喜欢AspectJ并会简单回答:
AspectJ有自己的编译器ajc
,它基本上是Eclipse Java编译器ejc
的增强版本,即它可以用于编译普通的Java文件以及本机AspectJ语法中的方面或者@AspectJ样式基于注释的语法。无论你以哪种方式编织你的方面,例如
ajc
(编译时编织),仅使用ajc
构建方面,使用javac
,ejc
或任何其他Java编译器构建Java代码,然后
ajc
(编译后或二进制编织)或 AspectJ所做的几乎总是一样的:它通过将方面代码编织到其中来修改Java字节代码。在案例1中,您只需直接从ajc
获取一组类文件。案例2.1创建了其他新类文件。案例2.2只是直接在JVM中在内存中创建新的字节代码。
我希望这会有所帮助。我们不要讨论这个问题,好吗?如果您有后续问题,请将我们限制在最低限度,好吗?