OOP引入封装、继承和多态性等概念来创建一种对象层次结构,用以模拟公共行为的一个集合。当咱们须要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP容许你定义从上到下的关系,但并不适合定义从左到右的关系。html
AOP技术则偏偏相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。spring
AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特色是,他们常常发生在核心关注点的多处,而各处都基本类似。好比权限认证、日志、事务处理。编程
实现AOP的技术,主要分为两大类:缓存
1. 一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;性能优化
2. 二是采用静态织入的方式,引入特定的语法建立“方面”,从而使得编译器能够在编译期间织入有关“方面”的代码。框架
实现AOP的技术特性:工具
一、 join point(链接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不须要去定义一个join point。post
二、 point cut(切入点):本质上是一个捕获链接点的结构。在AOP中,能够定义一个point cut,来捕获相关方法的调用。性能
三、 advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。优化
四、 aspect(方面):point cut和advice结合起来就是aspect,它相似于OOP中定义的一个类,但它表明的更可能是对象间横向的关系。
五、 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原生的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 强大的配置 |