AOP框架是Spring.NET的一个关键组件。Spring.NET的IoC容器与AOP框架是相互独立的,两者完全可以不依赖对方而单独使用,但是AOP做为一个强大的中间件解决方案,完善了IoC容器的功能。
先看一个概念:
通知(Advice):AOP框架在某个连接点所采取的行为。通知有多种类型,包括“环绕”通知,“前置”通知和“异常”通知等,后文将对通知类型进行讨论。包括Spring.NET在内的很多AOP框架都把通知建模为拦截器(interceptor),并且会维护一个"包围"在连接点周围的拦截器链。
然后我们看一个“前置”通知的例子:
1.先做一个目标对象(Target object),既要被通知的对象。目前Spring.NET的AOP框架要求目标对象必须实现一个以上接口。也就是说,要想让AOP框架支持某个类,该类必须实现至少一个接口。实际上这个限制并没有乍听起来那么麻烦:在任何情况下,面向接口编程都是一个好的习惯。(未来版本的Spring.NET AOP框架已经计划支持代理没有实现任何接口的类。)
接口代码如下:
实现类代码:
2.前置通知,要实现IMethodBeforeAdvice
代码如下:
3.主程序
运行程序:
我们可以看到在方法aoptest()被执行前,前置通知被执行。同理我们可以加入“环绕”通知,“异常”通知和后置通知。
“环绕”通知要继承IMethodInterceptor接口,,“异常”通知要继承IThrowsAdvice接口,后置通知要继承AfterAdvice 。
我们还可以完全用配置文件来实现,达到无浸入的目的。
修改app.config 如下:
当然主程序也要改下:
搞定 ,我们实现了一个简单的通知。