Android中AOP实践之一概念篇

预热

       在说AOP之前先来说说java最经典的OOP(面向对象编程),我们通过面向对象的封装思想把同一类事物的共性归为一类中,方便我们统一管理。比如我们会把汽车的轮子,发动机,车身喷漆都放在汽车这个类中。这样的好处是良好的封装能够减少耦合,隐藏信息实现细节。但是试想一下如果每个类中有没有重复调用的代码呢?比如日志输出、缓存处理。这里就需要用到AOP思想了。

什么是AOP编程

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

       上面是AOP的定义,比较抽象。我们接着上面来说,如果两个类都有做缓存处理,那么我们就需要在两个类中写同样的关于缓存的代码。既然是相同代码那肯定可以做封装嘛,但我们封装一个缓存工具类然后去掉用,上面两个类又和缓存类耦合了。那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?
       这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
       一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
       这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。
       AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。
引用知乎上一个图作为补充说明

img

面向切面,面向方面,也叫刀削面,蘸料是切面,刀削面是切入点,把蘸料加入到刀削面中,就是把切面(要切入的代码段)切入到切入点中去。即AOP。哈哈,我觉得很到位。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,446评论 25 708
  • 团队开发框架实战—面向切面的编程 AOP 引言 软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统...
    Bobby0322阅读 4,186评论 4 49
  • 在上一篇使用自定义注解实现MVP中Model和View的注入中,使用了自定义的方式进行依赖注入这一篇我们将继续对注...
    奇葩AnJoiner阅读 892评论 0 2
  • 隐瞒,逃避,从前。今天我所发现的一切,足以让我的爱情崩塌,真不知道,我还能用什么去坚持。许嵩说的对,装糊涂是极难...
    曙光灬初露阅读 142评论 0 1
  • 2017.10.10. 星期二 晴天 我的姐姐个子不是很高,留着齐耳短发,圆圆的苹果脸,带着一副紫色边框的...
    王紫杨阅读 448评论 5 7