Top
首页 > 老文章 > 正文

AOP技术在.NET平台中的应用与实现

AOP在.NET平台中的完美实现
发布时间:2011-07-28 11:10        来源:        作者:ll_efort
.Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企业级容器,使得.Net平台在大型的企业级应用上,常常为人所诟病。就目前而言,.Net平台并没有提供AOP技术的直接实现,而微软在未来对于.Net的发展战略目标,我们仍未可知。但我相信微软对于目前炙手可热的AOP技术应该不会视而不见。也许在未来的.Net平台下,会出现类似于Spring那样的轻量级IoC容器,加上O/R Mapping的进一步实现与完善,随着Windows Server操作系统的逐步推新,.Net平台对于企业级系统开发的支持会越来越多。 AOP技术在.Net平台中的应用,相较于Java平台而言,还远不够成熟,功能也相对较弱,目前能够投入商用的AOP工具几乎没有。借鉴Java开源社区的成功,.Net平台下AOP工具的开发也都依托于开源社区的力量。众多开源爱好者,仍然在坚持不懈对AOP技术进行研究和实践,试图找到AOP技术与.Net之间的完美结合点,从而开发出真正能够商用的功能强大的AOP工具。就目前而言,大部分在.Net平台下的AOP工具,大部分均脱胎于Java平台下的AOP工具,例如Spring.Net之于Spring,Eos之于AspectJ。由于Java平台和.Net平台在语言机制上的相似性,使得它们在实现AOP的技术机制上,大体相似,无非是利用静态织入或动态织入的方式,完成对aspect的实现。 目前在.Net平台下的AOP大部分仍然处于最初的开发阶段,各自发布的版本基本都是beta版。其中较有代表性的AOP工具包括Aspect#,Spring.Net,Eos等。 Aspect#是基于Castle动态代理技术实现的。Castle动态代理技术利用了.Net的Emit技术,生成一个新的类去实现特定的接口,或者扩展一个已有的类,并将其委托指向IInterceptor接口的实现类。通过Castle动态代理技术,就可以拦截方法的调用,并将Aspect的业务逻辑织入到方法中。利用Castle动态代理技术,最大的缺陷是它只对虚方法有效,这限制了Aspect#的一部分应用。 Spring.Net从根本意义上来说,是对Spring工具从Java平台向.Net平台的完全移植。它在AOP的实现上与Spring几乎完全相似,仍然利用了AOP联盟提供的拦截器、Advice等实现AOP。Spring.Net的配置文件也与Spring相同。 Eos采用的是静态织入的技术。它提供了独有的编译器,同时还扩展了C#语法,以类似于AspectJ的结构,规定了一套完整的AOP语法,诸如aspect,advice,before,after,pointcut等。Eos充分的利用了.Net中元数据的特点,以IL级的代码对方面进行织入,这也使得它的性能与其他AOP工具比较有较大的提高。
加载更多

专题访谈

合作站点
stat