学习AOP

来源:互联网 发布:linux mint与ubuntu 编辑:程序博客网 时间:2024/05/31 00:39

主要节选自博客http://www.cnblogs.com/wayfarer/articles/241024.html 

…………………………………………………………………………………………………………………………………………………………………
AOP技术的诞生并不算晚,早在1990年开始。AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加 功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。 

…………………………………………………………………………………………………………………………………………………………………
AOP有很多框架形式。

AOP技术在Java平台下是最先得到应用的。Spring是其中的一个框架实现。
AspectJ在2002年被转让给Eclipse Foundation,从而成为在开源社区中AOP技术的先锋,也是目前最为流行的AOP工具。
AspectWerkz则是基于Java的动态的、轻量级AOP框架。

与Java阵营中的AOP技术不同,目前在.Net平台下的各种AOP工具,基本上还停留在实验室阶段。但一些在技术上领先且逐渐成熟的AOP产品,也在开源社区中渐露峥嵘。这其中主要包括Aspect#,AspectDNG,Eos AOP等。

…………………………………………………………………………………………………………………………………………………………………
AOP与OOP

OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能 为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布 到的对象的核心功能毫无关系。

AOP所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
…………………………………………………………………………………………………………………………………………………………………
AOP主要2个部分
  1. 核心关注点——业务处理的主要流程
  2. 横切关注点——与主流程关系不大的部分。他们经常发生在核心关注点的多处,而各处都基本相似
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。


           

在分析系统需求之初,利用AOP的思想,分离出核心关注点和横切关注点。在实现了诸如日志、事务管理、权限控制等横切关注点的通用逻辑后,开发人员就可以 专注于核心关注点,将精力投入到解决企业的商业逻辑上来。同时,这些封装好了的横切关注点提供的功能,可以最大限度地复用于商业逻辑的各个部分,既不需要 开发人员作特殊的编码,也不会因为修改横切关注点的功能而影响具体的业务功能。


动态横切实例

如此以来,在整个电子商务系统中,核心业务包括订单管理和商品管理,它们都需要相同的权限管理


利用AOP技术,我们可以分离出系统的核心关注点和横切关注点,从横向的角度,截取业务管理行为的内部消息,以达到织入权限管理逻辑的目的。当执行AddOrder()等方法时,系统将验证用户的权限,调用横切关注点逻辑。


 静态横切

和动态横切的区别在于它不修改一个给定对象的执行行为。相反,它允许通过引入附加的方法字段和属性来修改对象的结构。此外,静态横切可以把扩展和实现附加到对象的基本结构中。

AOP优点

(一)在定义应用程序对某种服务(例如日志)的所有需求的时候。通过识别关注点,使得该服务能够被更好的定义,更好的被编写代码,并获得更多的功能。(二)利用AOP技术对离散的方面进行的分析将有助于为开发团队指定一位精于该项工作的专家。(三)持久性。AOP使得仅仅编写日志方面(logging aspect)成为可能,并且可以在这之上为整个应用程序提供新的功能。



原创粉丝点击