美文网首页
面向切面编程篇——基础

面向切面编程篇——基础

作者: lvTravler | 来源:发表于2019-08-20 00:08 被阅读0次

    C++、C#、Java、Python等目前流行的语言都是面向对象即OOP,封装、继承、多态是其三大特性,三大特性贯穿于开发工作中,但是面向切面编程(AOP)就不是那么尽人皆知了,那么什么是面向切面编程是啥呢?

    为了权威,笔者就直接引用百度百科的解释,百度百科解释如下:

    面向切面编程: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

    剖析一下以上定义,可以了解AOP的实现方式、用途。

    实现方式

    Android AOP实现方式传送门

    1. 预编译插入代码片段 eg:APT、AspectJ等
    2. 运行期动态代理 eg:HotFix运行时加载等
    用途:

    分离业务逻辑与系统级任务,例如将日志记录、性能分析、埋点等系统级任务从业务逻辑中分离出来,实现这些任务时不影响业务逻辑的代码。

    AOP和OOP区别与联系:

    1.OOP主要面向业务逻辑单元,而AOP注重于某一功能模块,此功能模块只是业务逻辑单元中的一个过程或步骤
    2.OOP与AOP互补关系,而不是替代关系

    AOP术语:

    以下术语来自《AOP中的概念通知、切点、切面》

    1. 通知、增强处理(Advice) 就是你想要的功能,也就是上说的安全、事物、日志等。定义好,然后再想用的地方用一下。包含Aspect的一段处理代码
    2. 连接点(JoinPoint) 这个就更好解释了,就是spring允许你是通知(Advice)的地方,那可就真多了,基本每个方法的钱、后(两者都有也行),或抛出异常是时都可以是连接点,spring只支持方法连接点。其他如AspectJ还可以让你在构造器或属性注入时都行,不过那不是咱们关注的,只要记住,和方法有关的前前后后都是连接点。
    3. 切入点(Pointcut) 上面说的连接点的基础上,来定义切入点,一个类里,有15个方法,那就有十几个连接点了对吧,但是你并不想在所有方法附件都使用通知(使用叫织入,下面再说),只是想让其中几个,在调用这几个方法之前、之后或者抛出异常时干点什么,那么就用切入点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。
    4. 切面(Aspect) 切面是通知和切入点的结合。现在发现了吧,没连接点什么事,链接点就是为了让你好理解切点搞出来的,明白这个概念就行了。通知说明了干什么和什么时候干(什么时候通过方法名中的befor,after,around等就能知道),二切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。
    5. 引入(introduction) 允许我们向现有的类添加新方法属性。这不就是把切面(也就是新方法属性:通知定义的)用到目标类中吗
    6. 目标(target) 引入中所提到的目标类,也就是要被通知的对象,也就是真正的业务逻辑,可以在毫不知情的情况下,被织入切面,可以专注于业务本身的逻辑。
    7. 代理(proxy) 怎么实现整套AOP机制的,都是通过代理,这个一会儿给细说。
      织入(weaving) 把切面应用到目标对象来创建新的代理对象的过程。

    AOP初步介绍就到这里,此篇只是简单介绍一下AOP,接下来就讲述在Android项。目中的实战

    相关文章

      网友评论

          本文标题:面向切面编程篇——基础

          本文链接:https://www.haomeiwen.com/subject/vgfqjctx.html