安卓

AOP简单应用(一)-execution篇

2019-03-04  本文已影响0人  海阔sun天空

前言

AOP,简单的说就是面向切面编程。什么叫面向切面呢?举个简单的例子,比如说你要给所有的click事件添加一个避免连续点击的功能,方法很简单,写完后放到一个工具类中,然后事件中调用,触发连续点击了就return掉。那么在这个过程中有几个问题需要注意:第一,需要在所有的点击事件中添加,有想法的朋友们可能会说我可以抽象出一个已经实现该方法的类出来,以后点击事件都实现这个类就好了。但这个协议你需要告知所有的开发人员,让他们遵守才行。第二:难免会有漏掉的地方,而且排查起来也非常麻烦。第三:假如后续不需要这个功能了,删除的过程也会让人疯狂。那么AOP就可以简单的实现,而不需要去侵入到业务层代码,只需要知道我要面向的功能--点击事件--这个切面就ok了,针对这个切面的内容,再进行下一步的处理,然后在编译的过程中,会自动将处理的代码编译到每一个点击事件中,完全无侵入的实现功能。

集成

本篇主要讲解Aspectj,Github地址:点我
集成分两步步:

如图1、2、3所示: 图1
图2
图3

切入点指示符

切入点指示符是用来指示切入点表达式的目的,有大概以下几种:

本篇主要讲解下execution的语法及其使用方式。

execution切入点

execution是用于匹配方法执行的连接点,换句话说,就是指定我们要hock的点,那么hock的完整写法就是
execution(* android.view.View.OnClickListener.onClick(..)),直观的看,大致上还是能看的懂是什么意思的。

android.view.View.OnClickListener.onClick(..),这个就比较好理解了,就是指我们要hock的方法的全路径。回头看下回调的onClick方法:


回调是有参数的,那么onClikc(..)中的..的意思就是表示我们hock的这个方法是有参数的,那么无参数的hock就不需要写..了。

*在Aspect中是通配符,在上面那个例子中,代表的是任意返回值,下面讲解execution语法大家就明白了。

接下来简单的说下execution的语法:
execution(注解?修饰符?返回值类型 类型声明?方法名(参数)异常?)

未完,待续...

上一篇下一篇

猜你喜欢

热点阅读