什么是AOP

AOP(面向方面编程)是对OOP的补充,用于处理横切关注点,如日志、权限验证和事务管理。AOP通过“横切”技术将这些关注点与核心业务逻辑分离,形成可重用的“方面”。连接点(join point)、切入点(point cut)、通知(advice)和方面(aspect)是AOP的核心概念,有助于减少代码重复,提高模块间的解耦度和系统的可维护性。AOP技术分为动态横切和静态横切,前者通过拦截消息实现,后者通过引入附加方法和属性修改对象结构。AOP的应用能够创建松散耦合、可扩展的系统,并提升开发效率。
摘要由CSDN通过智能技术生成

什么是AOP

AOP ( Aspect-Oriented Programming, 面向方面编程
) , 可以说是OOP ( Object - Oriented Programming , 面向对象编程 ) 的补充和完善.

OOP引入封装、继承和多态性等概念来建立一种对象层次结构, 用以模拟公共行为的一个集合. 当我们需要为分散的对象引入公共行为的时候, OOP则显得无能为力. 也就是说, OOP允许你定义从上到下的关系, 但并不适合定义从左到右的关系. 例如日志功能. 日志代码往往水平地散布在所有对象层次中, 而与它所散布到的对象的核心功能毫无关系. 对于其他类型的代码, 如安全性、异常处理和透明的持续性也是如此. 这种散布在各处的无关的代码被称为横切 ( cross - cutting ) 代码, 在OOP设计中, 它导致了大量代码的重复, 而不利于各个模块的重用.

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

使用 “横切” 技术, AOP把软件系统分为两个部分: 核心关注点和横切关注点. 业务处理的主要流程是核心关注点, 与之关系不大的部分是横切关注点. 横切关注点的一个特点是, 他们经常发生在核心关注点的多处, 而各处都基本相似. 比如权限认证、日志、事务处理. AOP的作用在于分离系统中的各种关注点, 将核心关注点和横切关注点分离出来. 正如Avanade公司的高级方案构架师Adam Magee所说, AOP的核心思想就是 “将应用程序中的商业逻辑同对其提供支持的通用服务进行分离."

实现AOP的技术, 主要分为两大类: 一是采用动态代理技术, 利用截取消息的方式, 对该消息进行装饰, 以取代原有对象行为的执行: 二是采用静态织入的方式, 引入特定的语法创建 “方面” , 从而使得编译器可以在编译期间织入有关 “方面” 的代码. 然而殊途同归, 实现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工具均实现了这些技术. 它们也可以是研究AOP技术的基本术语.

横切技术

“横切” 是AOP的专有名词. 它是一种蕴含强大力量的相对简单的设计和编程技术, 尤其是用于建立松散耦合的、可扩展的企业系统时. 横切技术可以使得AOP在一个给定的编程模型中穿越既定的职责部分 ( 比如日志记录和性能优化 ) 的操作.

如果不适用横切技术, 软件开发是怎样的情形呢? 在传统的程序中, 由于横切行为的实现是分散的, 开发人员很难对这些行为进行逻辑上的实现或更改. 例如, 用于日志记录的代码和主要用于其他职责的代码缠绕在一起. 根据所解决的问题的复杂程度和作用域不同, 所引起的混乱可大可小. 更改一个应用程序的日志记录策略可能涉及数百次编辑—— 即使可行, 这也是个令人头疼的任务.

在AOP中, 我们将这些具有公共逻辑的, 与其他模

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值