Emit学习-实战篇-实现一个简单的AOP框架(三)

今天来介绍配置文件的定义和加载,先给出配置文件的内容,然后在详细介绍里面各节的含义,以及如何用程序加载配置文件,内容如下:

配置文件

配置文件中包含两个部分分别是Regeisty节和Application节,Regeisty节包含了所有切面的实现类的定义,包含idvalueisDefault三个属性:id表示这个实现的代号,在Application节可以通过这个代号来引用某个实现类,作为主键标识,必须唯一value是这个实现类的具体信息,由所在的程序集和类的全名组成,中间用冒号分隔;isDefault属性为可选,如果设置为true,则表示某个方法在没有特殊的定义的情况下,使用这个实现类来实现某个具体的切面处理。Application节包含了所有需要特殊处理的方法的信息,首先是这个方法的所在类(类的信息描述与前面相同),然后是方法名,包括返回值类型和参数类型。按照我的设想,这个配置文件应该是通过一个配置工具,通过反射和用户的一些选择操作来生成的,当然现在这个配置工具还不存在,留待以后扩展。

接下来是配置文件的加载,我们定义了一个AopConfigManager类用来实现配置文件的加载以及维护,这里面包含了两个对外的方法分别用来初始化配置文件,和为方法植入时提供需要植入的切面信息,这两个方法的实现如下:

Init

这里通过XPathNavigator来实现xml文件的读取,然后分别初始化Regeisty节和Application节的内容,XPathNavigator类专门用来进行xml文件xpath形式的读取,具体的使用可以参见msdn中的内容,我就不多说了 XPathNavigator

GetMethodAspectInfo

该方法根据传入的方法信息以及切面的枚举项,从已经加载的配置文件中进行查找,如果找不到,则对起使用默认的配置,然后在将文本形式的类的信息通过反射转换成Type类型。

类的实现细节主要是一些xml文件的操作,这里就不贴出全部代码了,如果有需要,我会在本系列结束后提供完整的源码下载。另外从之前几篇文章的回复当中看出,有些园友可能对我这个框架的期待过高了,其实这只是一个非常简单的AOP框架,主要就是为了实践一下之前所学习的Emit中的一些内容,然后实现了一个AOP框架所需要具有的几个最基本的功能,甚至可能还称不上是一个完整AOP框架,大家不要期待太多,不然真要把我惭愧死了!

posted on 2009-04-01 21:45  yingql  阅读(3625)  评论(5编辑  收藏  举报

导航