AOP 的概念
面向切面编程(Aspect Oriented Programming),英文缩写 AOP,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
AOP 利用一种 “横切” 技术,将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低 模块间的耦合度,并有利于未来的可操作性和可维护性。
使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
AOP 技术特性
实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的 方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
AOP 是一个概念,一个规范,本身并没有设定具体语言的实现,但每种 AOP 框架实现 AOP 的技术特性却是相同的:
join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。
point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。
advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。
aspect(方面):point cut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。
introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的AOP工具又将其称为mixin。
AOP 常用框架
.Net 中
AspectCore
Castle
MEF
Unity
Spring.NET
AspectSharp
AspectDNG
Java 中
Spring AOP
AspectJ
Aspectwerkz
DynamicAspects
dynaop
评论列表
评论内容: