面向切面编程(AOP)的应用与实践
1. 面向切面设计的特点与潜力
在软件开发中,随着面向切面编程(AOP)的采用,普通应用中模式的数量可能会增加。面向切面设计有诸多独特之处。
首先,AspectJ在封装行为模式方面表现出色。在面向对象系统中,类之间的交互分散在行为模式的各个参与者中,而在面向切面系统里,通过语言的横切构造(如切入点、通知、标记接口等)将这些交互集中起来。这种组织方式使程序员能够同时考虑更多、更复杂的问题。而且,行为模式可以独立进行测试和完善,不受上下文干扰,这提高了通用代码复用的可能性,让团队能减少重复劳动,更多地去创造独特价值。
其次,AspectJ 1.1中字节码编织技术的出现进一步强化了这种情况。理论上,我们可以从不同供应商购买组件和行为模式,再用一些适配器切面将它们编织成一个连贯的系统。不过,AspectJ也有其局限性,它不能模块化所有内容,也并非能为程序员用思想或语言表达的每个操作都提供便捷的习惯用法。第三方软件若未设计得足够简单,可能难以修改,一些“功能齐全”的工具包和框架可能会妨碍清晰的切面组合。
然而,应用“现成”的观察者模式的结果令人鼓舞。以往真正面向组件的软件开发尝试缺少了AspectJ提供的两个重要能力:一是在不修改模块源代码的情况下显著改变其行为的能力,例如Java 2平台企业版(J2EE)只能通过XML描述符对组件进行有限的定制,而AspectJ能实现组件设计者可能都未曾想到的修改;二是以往的解决方案要求组件遵循特定接口,导致一套行为模式的组件无法用于另一套行为模式,而AspectJ在这方面有很大改进。
目前,AspectJ只是让我们初步领略了面向切面设计的可能性。随着语言的发展,它将能更优雅、精