AOP@Work: AOP工具比较,第2部分-开发环境 - 编程入门网
格。目前,虽然还存在其他研究质量 的编译器,但是 AspectJ 编译器是惟一达到商业质量的 AOP 编译器。注意,与 采用不同编译器的必要性相关的许多关注点都是工具本身所固有的。在构建时、 装入时或运行时修改这些字节码的时候,一些影响编译新字节码的问题也会出现 。正如下一节将讨论的,这个编织(weaving) 过程是所有 AOP 工具的基本过程 ,因为是它支持横切关注点的模块化实现。
编织和性能 正如可以用不同的机制(例如,解释或编译成字节码或对象代码)编译和执行 OOP 程序那样,AOP 工具为构建和执行方面提供了不同的工具。方面编织器 (aspect weaver) 提供了按照方面中切入点指定的方式自动调用通知的搭配方 式。编织器可以接受源代码或二进制形式 AOP 代码作为输入。方面的编织对于性 能和可伸缩性有影响,其中大部分取决于编织发生在应用程序生命周期的哪一部 分。方面的编织可以在以下时间发生: 构建时 —— 如果 OOP 编译器已经扩展到 AOP,那么方面编织就是标准编译 的一部分,否则就是编译后的步骤。 装入时 —— 与方面字节码的编译时编织相同,但是,是在类装入的时候进行 编织。 运行时 —— 拦截和基于代理的机制提供了切入点匹配的手段,可以决定什么 时候应当调用通知。 AspectJ 和 AspectWerkz 都支持构建时和装入时编织,但是 AspectJ 更侧重 于前者,而 AspectWerkz 更侧重于后者。JBoss AOP 和 Spring AOP 则侧重于在 运行时使用动态代理和拦截器调用方面。注意,也能将 Java VM 技术扩展到支持 运行时编织,但目前这仍然处在研究阶段。使用运行时拦截框架的关键好处是: 它很自然地扩展到了方面的热部署(hot deployment)。这意味着可以在运行时 激活或禁用所应用的通知。 热部署是 JBoss AOP 的核心特性,它提供了一个应用服务器管理控制台,可 以激活和禁止某些方面。在 Spring AOP 中也有热部署。加入 AspectWerkz 构建 和装入时编织模型的类似扩展也支持热部署。在 AspectJ 中,用这种方式激活和 禁止方面需要用通知中的 “ if” 测试或用 “if” 切入点进行。有时用术语“ 动态 AOP”来描述热部署,但是请注意,这个术语可能会造成误导,因为所有的 AOP 工具都支持动态连接点模型。而且 Spring AOP 完全基于代理机制。因此, 这种工具很适合粗粒度的横切,但是纯粹基于代理的 AOP 不能用来通知精细的连 接点(例如方法调用或字段设置)。另一方面,可以在没有构建时或装入时编织 的情况下使用 Spring AOP 的代理,这对于某些应用服务器的部署会非常有用。 AOP@Work: AOP工具比较,第2部分-开发环境(4)时间:2011-09-04 IBM Mik Kersten性能考虑 在 AOP 和性能的讨论中,需要重点关注的是关于 AOP 实现的性能的争论,它 们与若干年前关于对象性能问题的争论类似。一般来说,使用方面的代码执行起 来与纯粹面向对象的解决方案类似(这类方案中横切代码散落在整个系统中)。 在大多数企业应用程序中,执行时间由远程调用和数据库调用决定,所以通常没 有必要担心使用任何一种 AOP 工具时的开销。 也就是说,考虑一下AWBench 最新发布的 AOP 工具基准会很有价值(请参阅 参考资料)。要理解这些基准,需要考虑 AOP 工具进行方面编织和编译的不同技 术对性能的影响方式。 AspectJ 在编译时会带来开销,主要是内存和时间的使用,因为它是在编译时 执行大部分通知。在大型项目中,这些开销有可能是很可观的,而且可能带来一 些问题,特别是面向方面编程的横切特性通常意味着,在切入点发生变化时,大 部分系统都需要重新编译。但它也意味着在运行的时候,几乎不需要为了匹配切 入点做额外的工作。另外一个运行时的性能 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |