面向切面编程定义:面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。
上面的解释讲完后,估计很多人是似懂非懂的样子,简单的来解释一下,我们在运行我们的App时候,比如请求登录点击事件,请求拍照的事件,Button的埋点点击事件,在一个App里面有很多这样的场景吧,在正常情况下,我们的点击事件都会有相应的跳转或者去干些什么?但是假如我们在手机没有网络的时候,权限还没有被授予的时候,我们通常的做法是不是要写一些比如判断有没有网的,有没有权限的这样的代码,比如下面这段代码:
/**
* 登录的点击事件
*
* @param v
*/
public void login(View v) {
//CheckNetUtil网络处理的工具类
if (CheckNetUtil.isNetworkAvailable(this)) {
//如果有网,继续操作 比如处理登录的逻辑
} else {
Toast.makeText(this, "请检查您的网络连接!", Toast.LENGTH_LONG).show();
}
}
我们在点击事件的时候,要去判断有没有网络,就要写if(有没有网络){}else{}这样的代码,app中很多地方这样写,当然这样写实没有问题的。但是我们的app体量大了以后,需要做网络判断的地方多了以后,需要权限的地方多了以后,像
if(有没有网络){}else{}这样的代码就是属于一个体力活。而且不便于后期变动,我们上面的代码现在是没有网络的情况下是弹了一个Toast,但是假如我们将来变个花样,说是我们在没有网络的情况下需要弹出一个dialog,叫用户点击前往设置界面去设置网络呢?是不是又是个体力活,又得去吭哧吭哧的找到这些if else去改代码,那我们到底有么有比较好的方法呢?当然有,那就是我们今天在文章一开始的地方所谈到的面向切面编程。就上面的例子来说,我们该怎么办呢?利用面向切面编程的思想,我们把网络判断的逻辑单读切出来去处理,这样做的好处:
1:保证了代码的简洁。
2:便于扩展,比如上面的我们说的不想要吐司了,要dialog。
利用切面编程之后的代码:
/**
* 登录的点击事件
*
* @param v
*/
@CheckNet
public void login(View v) {
//有网,继续操作 比如处理登录的逻辑
}
下面我们来看具体的步骤:
先去官网下载aspectj点击打开链接
下载完成之后直接双击安装,如果无法直接双击安装,请检查您的JDK环境,或者直接使用命令进行安装(命令后是自己下载的jar包的名称):
命令:java -jar aspectj-1.8.13
新建工程,到我们刚才安装的AspectJ目录下,去拷贝一个jar包&#x