AOP之基础知识

10,571 阅读2分钟

一、AOP即面向切向编程

AOP 是 Aspect Oriented Programming 的缩写,译为面向切向编程。用我们最常用的 OOP 来对比理解:

纵向关系 OOP,横向角度 AOP

举个小例子:

设计一个日志打印模块。按 OOP 思想,我们需要统计所有activity oncreate方法执行时间,需要在所有模块的activity中去统计耗时。

但是这个逻辑是横跨并嵌入众多模块里的,在各个模块里分散得很厉害,到处都能见到。设计时只使用 OOP思想可能会带来两个问题:

  1. 对象设计的时候一般都是纵向思维,如果这个时候考虑这些不同类对象的共性,不仅会增加设计的难度和复杂性,还会造成类的接口过多而难以维护(共性越多,意味着接口契约越多)。
  2. 需要对现有的对象 动态增加 某种行为或责任时非常困难。

而AOP就可以很好地解决以上的问题,怎么做到的?除了这种纵向分类之外,我们从横向的角度去观察这些对象,无需再去到处调用 方法耗时逻辑 了,声明哪些地方需要统计耗时,这个地方就是一个切面,AOP 会在适当的时机为你把打印语句插进切面。

如果说 OOP 是把问题划分到单个模块的话,那么 AOP 就是把涉及到众多模块的某一类问题进行统一管理。AOP的目标是把这些功能集中起来,放到一个统一的地方来控制和管理。利用 AOP 思想,这样对业务逻辑的各个部分进行了隔离,从而降低业务逻辑各部分之间的耦合,提高程序的可重用性,提高开发效率。


OOP 与 AOP 的区别

  1. 思想结构不同:OOP 是纵向结构,AOP 是横向结构。
  2. 注重方面不同:OOP 注重业务逻辑单元的划分,AOP 偏重业务处理过程中的某个步骤或阶段,可以统一处理某一类事物。

OOP 与 AOP 的联系

两者之间是一个相互补充和完善的关系。

二、应用场景

  1. 日志输出和方法计时;
  2. 动态权限申请;
  1. 无痕埋点
  2. 全局安全控制;
  1. 事件防抖
  2. 性能监控、统计
  1. 异常处理、事物处理
  2. 热修复、修改三方代码

三、AOP 方法

  1. APT
  2. AspectJ
  1. ASM
  2. Javassist