【Android AOP–01】Android用AspectJ来实现AOP编程

作者 : 开心源码 本文共1829个字,预计阅读时间需要5分钟 发布时间: 2022-05-12 共222人阅读

前言

小伙伴们,大家好,我是唠嗑,很长时间没有升级Android系列文章了,最近研究了一下AOP,觉得很有意思,也很实使用,所以打算写一个关于AOP的系列文章,和大家一起讨论学习。

其实在去年,我就在项目中使用过了一次AOP,大家可以看看。
Android AOP面向切面编程详解

接下来就带小伙伴学习一下,如何在你的项目中用AOP。

用AOP,是需要做一大堆配置的,为了方便,我们用沪江同学的开源项目AspectJ HujiangTechnology/gradle_plugin_android_aspectjx

用步骤

1、在项目的根目录的build.gradle中增加如下依赖

dependencies {        classpath 'com.android.tools.build:gradle:2.3.3'        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.0'        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }

2、在app.gradle中增加如下

apply plugin: 'android-aspectjx'//或者者这样也可以apply plugin: 'com.hujiang.android-aspectjx'dependencies {    //aspectjrt的依赖    compile 'org.aspectj:aspectjrt:1.8.9'}

到这里,配置就算完成了。这是我目前用过的最简单的配置了。


通过一个小例子来讲解

平常我们经常会使用到Log日志,比方在Activity的所有生命周期的方法中加一条Log。

下面一起来看看通过AOP是如何实现的。
创立一个AspectTest类

@Aspectpublic class AspectTest {    final String TAG = AspectTest.class.getSimpleName();    /**     * 在MainActivity的所有生命周期的方法中打印log     * @param joinPoint     * @throws Throwable     */    @Before("execution(* *..MainActivity+.on**(..))")    public void method(JoinPoint joinPoint) throws Throwable {        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();        String className = joinPoint.getThis().getClass().getSimpleName();        Log.e(TAG, "class:" + className);        Log.e(TAG, "method:" + methodSignature.getName());    }}

注视详解:

  • @Aspect注解:标示这是一个切面类
  • @Before:可以在方法后插入代码

MainActivity
只要要增加生命周期的几个方法就可。

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    protected void onStart() {        super.onStart();    }    @Override    protected void onResume() {        super.onResume();    }    @Override    protected void onPause() {        super.onPause();    }    @Override    protected void onStop() {        super.onStop();    }    @Override    protected void onDestroy() {        super.onDestroy();    }

看看打印结果

怎样样?很简洁方便吧。使用AOP一个最大的好处是:在不入侵原有代码的情况下,可以对同一功能统一解决,比方检查登录,检查权限,防止按钮二次点击等。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 【Android AOP–01】Android用AspectJ来实现AOP编程

发表回复