企业开发框架NHibernate和Spring.Net简介-3

企业开发框架NHibernate和Spring.Net简介-3
2008-03-24 13:59
3.面向方面编程(AOP)
面向方面编程是对面向对象编程(OOP)的补充,是另外一种思考编程框架的方法。面向对象是将应用分解成具有层次结构的对象;而面向方面编程则是把程序分解成方面或者关注点,使诸如事务管理等方面的模块化成为可能。Spring.NET中很关键的一个组件就是AOP框架。能够帮助Spring.NET的 IoC容器为企业应用提供一个非常强大的中间件解决方案。
AOP用于Spring.NET可以完成下列功能。
*    提供公开的企业服务,尤其是作为COM+公开服务的替代者。这些服务中最重要的服务是公开的事务管理,这是Spring.NET事务抽象的基础。
*    允许用户实现定制的方面,通过面向方面编程来补充面向对象编程的不足。
用户不但可以把Spring.NET AOP看作是能够不通过COM+就可以提供公开事务管理的技术,而且还可以充分发挥Spring.NET AOP框架的功能区实现定制方面。
通过上面的介绍读者可能对AOP已经有了一个大致的了解,下面介绍几个关于AOP的概念。
*    方面(Aspect):这个是一个让读者感觉比较模糊的概念,它和通常意义上的方面不完全一样,它是对关注点的模块化,这可能会横切多个对象。事务管理是一个非常好的横切关注点企业应用的例子。在Spring.NET中,方面作为建议者或者监听器的形式实现。
*    连接点(Jointpoint):程序运行期间的一些点,例如方法调用或者特殊的异常被抛出。
*    建议(Advice):AOP框架在一个特殊连接点上采取的动作。这些不同类型的建议包括“around”、“before”和“throws” 等建议。很多AOP框架,包括Spring.NET,都把一个建议模拟成一个监听器,同时维护一个“around”连接点的监听器链。
*    切点(Pointcut):一组连接点,用于指定建议应该激活的时间。一个AOP框架必须能够允许开发人员指定切点,例如,使用正则表达式。
*    介绍(Introduction):添加方法或域到建议类。Spring.NET允许介绍一个新的接口到任何一个建议对象中。例如,为了简化对对象状态变化的跟踪,可以使用建议为任何对象实现一个IAuditable接口。
*    目标对象:包含连接点的对象。
*    AOP代理:由AOP框架创建的对象,包括建议。在Spring.NET中,一个AOP代理是一个在运行期使用IL代码生成的动态代理。
*    Weaving:装配对象创建一个被建议对象。装配工作发生在编译期(例如使用Gripper-Loom .NET编译器),也能发生在运行期。Spring.NET在运行期执行装配动作。
4.Spring.NET应用实例
下面以经典的Movie Finder作为Spring.NET应用实例来讲解IoC容器的使用方法。实例的C#代码可以在Spring.NET发布版的examples/Spring/Spring.Examples.MovieFinder目录中找到。
(1)Movie Finder。MovieFinder例子的起始类是MovieApp类,这是具有单一应用程序入口点的普通.NET类。代码如下所示:
#001 using System;
#002 namespace Spring.Examples.MovieFinder
#003 {
#004     public class MovieApp
#005     {
#006          public static void Main ()
#007          {
#008          }
#009     }
#010 }
现在想做的是获得一个对MovieFinder类实例的引用。这是Spring.NET例子,所以要从Spring.NET的IoC容器类IApplicationContext获得这个引用。应用程序配置文件中的IApplicationContext配置信息如下:
#001 <?xml version="1.0" encoding="utf-8" ?>
#002 <configuration>
#003 <configSections>
#004 <sectionGroup name="spring">
#005 <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
#006 <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
#007 </sectionGroup>
#008 </configSections>
#009 <spring>
#010 <context>
#011 <resource uri="config://spring/objects"/>
#012 </context>
#013 <objects>
#014 <description>An example that demonstrates simple IoC features.</description>
#015 </objects>
#016 </spring>
#017 </configuration>
将在应用程序示例中用到的对象配置成嵌套在<objects/>元素中的<object/>元素。
posted @ 2008-09-05 09:44  YFeng_Lee  阅读(931)  评论(0编辑  收藏  举报