关于AOP和iOS的一些联系

前言

最近在资讯类APP的登录拦截的思考中,想到AOP的思想。想与之前iOS开发中用得到的几个技术加以对比和理解,学习了相关知识点,在这里加以记录。

  • 登录拦截
  • 埋点与业务隔离
  • runtime
    1.方法交换
    2.KVO

学习来源:https://blog.csdn.net/caterpillar_here/article/details/753473


AOP概念

AOP全名为Aspect-Oriented Programming,有关于AOP的许多名词术语都过于抽象,单从字面上并不容易理解其名词意义,这边将以之前介绍代理机制的范例来逐一对照以介绍AOP的术语与观念:

  • Cross-cutting concern
  • Aspect
  • Advice
  • Joinpoint
  • Pointcut
  • Target
  • Proxy
  • Weave

1.Cross-cutting concern

  • 在DynamicProxyDemo项目的例子中,记录的动作原先被横切(Cross-cutting)入至HelloSpeaker本身所负责的业务流程之中,另外类似于记录这类的动作,如安全(Security)检查、事务(Transaction)等系统层面的服务(Service),在一些应用程序之中常被见到安插至各个对象的处理流程之中,这些动作在AOP的术语中被称之为Cross-cutting concerns。

  • 以下图片说明可强调出Cross-cutting concerns的意涵,例如原来的业务流程是很单纯的:

APO1.jpg
  • 现在为了要加入记录(Logging)与安全(Security)检查等服务,对象的程序代码中若被硬生生的写入相关的Logging、Security程序片段,则可使用以下图解表示出Cross-cutting与Cross-cutting concerns的概念:
aop-2.jpg
  • Cross-cutting concerns若直接撰写在负责某业务的对象之流程中,会使得维护程序的成本增高,例如若您今天要将对象中的记录功能修改或是移除该服务,则必须修改所有撰写曾记录服务的程序代码,然后重新编译,另一方面,Cross-cutting concerns混杂于业务逻辑之中,使得业务对象本身的逻辑或程序的撰写更为复杂。

2.Aspect

  • 将散落于各个业务对象之中的Cross-cutting concerns收集起来,设计各个独立可重用的对象,这些对象称之为Aspect,例如在DynamicProxyDemo项目中将登录的动作设计为一个LogHandler类别,LogHandler类别在AOP的术语就是Aspect的一个具体实例,在AOP中着重于Aspect的辨认,将之从业务流程中独立出来,在需要该服务的时候,缝合(Weave至应用程序之上,不需要服务的时候,也可以马上从应用程序中脱离,应用程序中的可重用组件不用作任何的修改,例如在DynamicProxyDemo项目中的HelloSpeaker所代表的角色就是应用程序中可重用的组件,在它需要记录服务时并不用修改本身的程序代码。

  • 另一方面,对于应用程序中可重用的组件来说,以AOP的设计方式,它不用知道处理提供服务的对象之存在,具体的说,与服务相关的API不会出现在可重用的应用程序组件之中,因而可提高这些组件的重用性,您可以将这些组件应用至其它的应用程序之中,而不会因为目前加入了某些服务而与目前的应用程序框架发生耦合。

3.Advice

  • Aspect的具体实作称之为Advice,以记录的动作而言,Advice中会包括真正的记录程序代码是如何实作的,像是DynamicProxyDemo项目中的LogHandler类别就是Advice的一个具体实例,Advice中包括了Cross-cutting concerns的行为或所要提供的服务。

4.Joinpoint

  • Aspect在应用程序执行时加入业务流程的点或时机称之为Joinpoint,具体来说,就是Advice在应用程序中被呼叫执行的时机,这个时机可能是某个方法被呼叫之前或之后(或两者都有),或是某个例外发生的时候。

5.Pointcut

  • Pointcut是一个定义,藉由这个定义您可以指定某个Aspect在哪些Joinpoint时被应用至应用程序之上。具体的说,您可以在某个定义档中撰写Pointcut,当中说明了哪些Aspect要应用至应用程序中的哪些Joinpoint。

6.Target

  • 一个Advice被应用的对象或目标对象,例如DynamicProxyDemo项目中的HelloSpeaker就是LogHandler这个Advice的Target。

7.Introduction

  • 对于一个现存的类别,Introduction可以为其增加行为,而不用修改该类别的程序,具体的说,您可以为某个已撰写、编译完成的类别,在执行时期动态加入一些方法或行为,而不用修改或新增任何一行程序代码。

8.Proxy

  • 《Expert One-on-One J2EE Development WIthout EJB》一书中,Rod Johnson、Juergen Hoeller在第八章中有提到,AOP的实作有五个主要的策略: Dynamic Proxies、Dynamic Byte Code Generation、Java Code Generation、Use of a Custon Class Loader、Language Extensions。

  • 在之前静态代理与动态代理中,已经使用实际的程序范例介绍过代理机制的实现,Spring的AOP主要是透过动态代理来完成。

9.Weave

  • Advice被应用至对象之上的过程称之为缝合(Weave),在AOP中缝合的方式有几个时间点:编译时期(Compile time)、类别加载时期(Classload time)、执行时期(Runtime)。

  • 结合DynamicProxyDemo的实例,将以上介绍过的AOP相关名词具体的使用图片来加以表示,有助于您对每一个名词的理解与认识:

aop-3.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容