Aop_面向切面编程_思想理解资料03 . .

来源:互联网 发布:nginx cookie 灰度 编辑:程序博客网 时间:2024/05/29 18:01
(1)AOP的技术本质
a.
AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP的补充和完善。
OOP引入了封装、继承、多态等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。
当我们需要为分散的对象引入公共行为的时候,OOP显得无能为力。
也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。
例如日志功能,日志代码往往水平的散布在所有对象层次中,而与它所散布的对象的核心功能毫无关系。
对于其它类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)

b.
而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将哪些影响了多个类的公共行为封装到一个可重用的模块,并将其命名为“Aspect”,即方面。
所谓“方面”,简单的说,就是将哪些与业务无关,却为业务模块所公共调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,就是所谓的“方面”了。然后它又巧妙的将剖开的切面复原,不留痕迹。

c.使用“横切”的技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的一部分时横切关注点。横切关注点的一个特点是,它们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离”。

(2)实现AOP的技术,主要分为两大类:
一是采用动态代理技术,利用截取消息的方式,对该消息进行封装,以取代原有对象行为的执行;
二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
然而殊途同归,实现AOP的结束特性是相同的,分别为:

(3)AOP术语:
a. join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,不需要去定义一个joint Point.
b. point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方面的调用。
c. advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑
d. aspect(方面)point cut 和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多的是对象间的横向关系。
e. introduce(引入):为对象引入附加的方法和属性,从而达到修改对象结构的目的。有的AOP工具又称其为mixin.
上述的技术特性组成了基本的AOP技术,大多数AOP工具均实现了这些技术,他们也可以是研究AOP技术的基本术语。
AOP(面向方面编程--Spring两大基本思想之二) - 莫语 - 莫语的麟趾小镇

(4)“横切”是AOP的专有名词。它是一种蕴含强大力量的相对简单的设计和编程技术。尤其是用于建立松散耦合的、可扩展的企业系统时。横切技术可以使得AOP在一个给定的编程模型中穿越既定的职责不分(比如日志记录和性能优化)的操作。
 
(5)如果不使用横切技术,软件开发是怎样的情形呢?
在传统的程序中,由于横切行为的实现时分散的,开发人员很难对这些行为进行逻辑上的实现或者更改。例如,用于日志记录的代码和主要用于其他职责的代码缠绕在一起。根据所解决的问题的复杂程度和作用域的不同,所引起的混乱可大可小。更改一个应用程序的日志记录策略可能涉及数百次的编辑---即使可行,这也是个令人头疼的任务。

(6)在AOP中,我们将这些具有公共逻辑的,与其他模块的核心逻辑纠缠在一起的行为称为“横切关注点(crossingcutting concern)”,因为它跨越了给定编程模型中的典型职责界限。