什么是AOP编程?

AOP是OOP的延续,是Aspect Oriented Programming的缩写,直译意思:面向方面编程、面向切面编程

AOP通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。可以在代码阶段实现分离关注,实现松耦合,然后在运行时将相关动作特征植入运行,从而改变程序的运行顺序,达到拦截或者增加功能的目的

常见框架:VirtualXposed

 

下面先说AOP是什么样的思想,我们一步一步慢慢来,先看一下传统程序的流程,比如银行系统会有一个取款流程

什么是AOP编程?_第1张图片

我们可以把方框里的流程合为一个,另外系统还会有一个查询余额流程,我们先把这两个流程放到一起:

什么是AOP编程?_第2张图片

有没有发现,这个两者有一个相同的验证流程,我们先把它们圈起来再说下一步:

什么是AOP编程?_第3张图片

有没有想过可以把这个验证用户的代码是提取出来,不放到主流程里去呢?这就是AOP的作用了。有了AOP,写代码时可以专注业务逻辑而不用考虑验证用户步骤,写完之后,调用其他地方已经写好验证用户的代码,把这段代码加到哪几个地方,而不要你自己Copy过去。
       这里还是两个地方,如果你有多个控制流呢,这个写代码的方法可以大大减少你的时间,不过AOP的目的不是这样,这只是一个“副作用”,真正目的是:你写代码的时候,事先只需考虑主流程,而不用考虑那些不重要的流程。

懂C的都知道,良好的风格要求在函数起始处验证参数,如果在C上可以用AOP,就可以先不管校验参数的问题,事后使用AOP就可以隔山打牛的给所有函数一次性加入校验代码,而你只需要写一次校验代码。

现在大概明白了AOP了吗,我们假设上面那个方框是个平面,你可以把它当块板子,这块板子插入一些控制流程,这块板子就可以当成是AOP中的一个切面。所以AOP的本质是在一系列纵向的控制流程中,把那些相同的子流程提取成一个横向的面,这句话应该好理解吧,我们把纵向流程画成一条直线,然把相同的部分以绿色突出,如下图左,而AOP相当于把相同的地方连一条横线,如下图右,这个图没画好,大家明白意思就行。

    什么是AOP编程?_第4张图片什么是AOP编程?_第5张图片

这个验证用户这个子流程就成了一个条线,也可以理解成一个切面,aspect的意思我认为是方面,你用什么实物去类比,只要你能理解都可以。这里的切面只插了两三个流程,如果其它流程也需要这个子流程,也可以插到其它地方去。

你可能感兴趣的:(Android,行业新闻/背景/概念,破解/反编译)