为,这些组件可以被认为是方面。但该观点并未得到一致的认同。事实上,在.Net平台下,
推动AOP技术发展的原动力并非微软,而是开源社区。虽然微软的技术专家们也听到了
在.Net Framework中增加AOP技术的群众呼声,但作为如此巨大的软件公司,要让它灵活地
转变战略方向,显然是不太现实的。正因为此,才赐予了开源社区在AOP技术的研究与探
索上一个巨大的发展空间。
与Java阵营中的AOP技术不同,目前在.Net平台下的各种AOP工具,基本上还停留在实
验室阶段。但一些在技术上领先且逐渐成熟的AOP产品,也在开源社区中渐露峥嵘。这其
中主要包括Aspect#,AspectDNG,Eos AOP等。
Aspect#是基于Castle动态代理技术来实现的。Castle源于Apache Avalon项目,其目的在
于实现一个轻量级的IoC容器。Aspect#于2005年6月被收录为Castle的一个子项目。它是针
对CLI(.Net和Mono)实现的AOP框架,利用了反射、代理等机制。目前的Aspect#版本为
2.1.1。
AspectDNG目前的版本为0.7,仍然处于beta版的阶段。它的实现技术是基于rail的静态
织入。Rail属于IL级别下的代码织入,它自定义的一套xml格式的ILML语言,能够将原有
的程序集拆散成ILML格式,以便于对静态程序集进行修改和扩展,从而达到静态织入的目
的。因为AspectDNG是属于IL级别下的代码织入,因此在.Net平台下,并不受具体的编程
语言限制。
Eos AOP与AspectDNG一样,仍然采用静态织入的方式,但从语法定义上,它更近似
于AspectJ关于AOP的实现。它扩展了C#语法,引入了aspect、introduce、before、after等关
键字,并且提供了专用的Eos编译器。Eos项目是于2004年9月开始启动,2005年6月推出的
0.3.3版本为最新版本,主要的开发人员为Hridesh Rajan和Kevin Sullivan。Hridesh Rajan为
Virginia大学计算机系的研究生,Eos项目最初是由他提出的;而后者则为该计算机系的副
教授(Associate Professor)。所以自 Eos诞生之初,就带有浓厚的学院派特色。
从AOP技术的整体发展来看,高性能、稳定、可扩展、易用的AOP框架是其趋势与目
标。从上述对各种AOP技术的分析来看,AOP技术无疑是具有共同特点的,而各种实现技
术就是围绕着这些共性深入与延伸。下面将概要地介绍AOP的本质,以及它的技术要素。
2.AOP 技术概览
AOP可以说是OOP(Object-Oriented Programming)的补充和完善。OOP引入封装、继
承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当需要为分
散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许定义从上到下
的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所
有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安
全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切
(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重
用。