初探Spring.Net之AOP

    日志、异常、权限,这些几乎在所有的框架或者工程中都会不可避免的底层功能,对于程序员来说是枯燥无聊的简单重复的编写代码行。但是当我第一次听说AOP编程概念的时候,我就隐约感觉到程序员从此可以从那些非业务逻辑的代码行编写中解放出来。
    粗略看了一下Spring.Net的Aop QuickStart,演示了简单的横切功能。如下是App.Config文件中Sprint.Net的配置信息。第9-22行,定义了一个名为"myServiceObject"的Sprint.Net上下文对象,该对象服务于是target对象"myServiceObjectTarget",并且提供名为"consoleLoggingAroundAdvice"的服务(该服务由上面定义的同名对象提供)。

 1 None.gif          < objects  xmlns ="http://www.springframework.net" >
 2 None.gif             < description > An example that demonstrates simple AOP functionality. </ description >
 3 None.gif             < object  id ="consoleLoggingAroundAdvice"  type ="Spring.Aop.Support.RegexpMethodPointcutAdvisor" >
 4 None.gif                 < property  name ="pattern"  value ="Do" />
 5 None.gif                 < property  name ="advice" >
 6 None.gif                     < object  type ="Spring.Examples.AopQuickStart.ConsoleLoggingAroundAdvice" />
 7 None.gif                  </ property >
 8 None.gif             </ object >
 9 None.gif             < object
10 None.gif                 id ="myServiceObject"
11 None.gif                type ="Spring.Aop.Framework.ProxyFactoryObject" >
12 None.gif                 < property  name ="target" >
13 None.gif                     < object
14 None.gif                         id ="myServiceObjectTarget"
15 None.gif                        type ="Spring.Examples.AopQuickStart.ServiceCommand" />
16 None.gif                 </ property >
17 None.gif                 < property  name ="interceptorNames" >
18 None.gif                     < list >
19 None.gif                         < value > consoleLoggingAroundAdvice </ value >
20 None.gif                     </ list >
21 None.gif                 </ property >
22 None.gif             </ object >
23 None.gif         </ objects >
24 None.gif

    如下是使用定义了的Spring上下文对象来实现Aop的功能(摘自Aop Quick Start)。第1-3行取得上下文对象,该对象可替代真正的业务逻辑对象ServcieCommand。

1 None.gif                 IApplicationContext ctx
2 None.gif                     =  ConfigurationSettings.GetConfig( " spring/context " as  IApplicationContext;
3 None.gif                ICommand command  =  (ICommand) ctx[ " myServiceObject " ];
4 None.gif                command.Execute();
5 None.gif

    至此,我们可以看到Spring.Net的Aop实现是“工厂方法+面向接口编程+×××”,这个×××的技术核心就是myServiceObject上下文对象(即代码中的command对象)是如何构造出来的,它自动实现ServiceCommand的实现接口ICommand接口。我尝试使用Visual Studio .Net 2003的监控功能,却无法获得command的任何对象信息。
    针对接口编程使得,程序员不得不遵循接口的编程方式。一来比较死板,二来旧的代码服用率降低。希望Spring.Net能提供类似JBoss的基于class load的Aop实现。

转载于:https://www.cnblogs.com/leao/archive/2005/09/29/246819.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值