2010-06-05 89 views
0

我需要快速回答AOP中的一件简单的事情。编译如何与AOP一起工作?

如果我有一个代码部署在客户端,我写了新的方面,我想在客户端软件。我是否必须用“原始”代码和新的“AOP”代码“重新编译”完整的软件? (与aop编译器)?

即我需要原始程序的源代码与新AOP的源代码并编译它们两个吗?

P.S: 我在问一般情况,并非特定于任何语言。但是,如果答案必须是语言特定的,那么让我们说Java和AspectJ作为AOP框架。

+1

您的问题*需要*是语言特定的,因为答案在每种情况下都会有所不同。有时AOP是编译时,有时候是运行时。 – skaffman 2010-06-05 22:30:30

+0

就在Java中,有不同的编译器会执行运行时以及编译时。 – 2010-06-06 02:16:14

+0

好吧让我们去与java和运行时的东西。你能指导我吗?我最感兴趣的是我已经在客户端部署了代码,并且我不想重新编译整个代码。部署新的方面可以拦截已经部署的代码吗?即某种类型的钩子,我可以使用VM或类似的东西生成? – 2010-06-06 23:03:47

回答

0

您想查看AspectJ LTW(加载时织入)。

P.S .:我假设你的客户愿意部署你的方面代码(例如在一个单独的JAR中)并以稍微不同的方式启动JVM以激活LTW。那么答案是肯定的,这是可能的。

P.P.S .: AspectJ甚至可以重新编译您的类文件并进行二进制方面编织,而无需您拥有源代码。通过这种方式,您可以通过纵横编织版本替换客户端代码。这样,JVM就可以像以前一样启动,只需要替换所涉及的客户端库。