AOP学习总结
参考:什么是AOP?
OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。
AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。
AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。
实现AOP的技术,主要分为两大类:
1. 一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
2. 二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
实现AOP的技术特性:
1、 join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。
2、 point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。
3、 advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。
4、 aspect(方面):point cut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。
5、 introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的AOP工具又将其称为mixin。
用途:
l Authentication 权限
l Caching 缓存
l Context passing 内容传递
l Error handling 错误处理
l Lazy loading 懒加载
l Debugging 调试
l logging, tracing, profiling and monitoring 记录跟踪 优化 校准
l Performance optimization 性能优化
l Persistence 持久化
l Resource pooling 资源池
l Synchronization 同步
l Transactions 事务
其它参考:
1. AOP是什么?
2. 百度百科-面向切面编程
.NET Framework中的AOP技术
.NET原生的AOP技术实现:
l 使用Decorator Pattern实现,参考《Head First Design Patterns》第三章
l 使用.NET Remoting(RealProxy,ContextBoundObject),
a) 参考RealProxy 类,The simplest AOP scenario in C#
b) 使用Dynamic Proxy Pattern,参考Dynamic Decorator Pattern,Add Aspects to Object Using Dynamic Decorator,Dynamic Decorator and Castle DynamicProxy Comparison
c) .Net平台AOP技术研究,在.Net中关于AOP的实现(补遗)
第三方的.NET AOP框架:
l 动态代理技术
n Encase
n LOOM.NET(同时提供动态和静态两种方式)
l 静态织入:
n Eos-AOP
n RAIL - Runtime Assembly Instrumentation Library(静态横切)
Using Decorator Pattern:
Using .NET Remoting
Using Castle DynamicProxy
参考:
l Document of Castle DynamicProxy
l Castle's DynamicProxy for .NET
Using Spring.NET
参考:
各种方式优缺点比较:
方式 | 优点 | 缺点 |
使用Decorator Pattern实现 | l 需要实现大量的Decorator l Decorator不能复用(和用AOP之前同样的问题) | |
使用.NET Remoting | l must extend MarshalByRef or ContextBoundObject (which carries another semantic) l mess with your object model hierarchy | |
Castle DynamicProxy | l Good Performance | |
Spring.NET AOP | l 强大的配置 |