先附上自己基于aspject封装的aop 插件

1.为什么要用切面

随着业务越来越复杂,项目中的模块可能越来越多, 面向切面可以减少模块间的耦合,提高模块的复用率

2.aspjectj语法

android aop框架 有好几种,不过aspjectj应该算最成熟了,github上很多开源的也是基于这个框架的,先简单介绍下aspject语法

    @After("execution(* com.vapi.test.MyTest.get**(..))")public void onLibraryTestMethod(JoinPoint joinPoint) throws Throwable {Log.e("helloAOP", "mytestlibrary:::" + joinPoint.getSignature());}

  

从下面的join point 对应android 的代码可以看书, 主要是切面类型,普通方法或者构造器

point cut

call: 在织入方法处

execution: 在织入方法内

这两个的区别很容易理解, 比如a.b(),  call是在a.b()前后, execution 在b()内

within和target 匹配制定类型 可以是注解类型

    @After("@within(com.lin.aopdemotest.anno.WithInMark)")public void onTestWith(JoinPoint joinPoint) throws Throwable {Log.e(TAG, "com.lin.aopdemotest.anno.WithInMark :::" );}

  

advice

after,before: 织入前后

afterReturn, afterThrows:织入方法会报错的时候

around: 可以理解为直接替换方法, 在方法内自行决定处理被调用方法

Pointcut: 声明一个切面,后面after,before可以直接引用声明的切面,相当于定义了一个引用

3. android 接入aspjectj

kotlin跟java编译后的路径是不一样的 需要单独处理 这里需要注意下,

                String[] kotlinArgs = ["-showWeaveInfo","-1.8","-inpath", kotlinInPath,"-aspectpath", aspectpath,"-d", kotlinPath,"-classpath", totalPath,"-bootclasspath", project.android.bootClasspath.join(File.pathSeparator)]MessageHandler handler = new MessageHandler(true)

  inpath: 需要切面的路径

aspectpath: 切面包的路径 即 @Aspect的路径

-d:  切面后新生成文件路径,一般等于inpath

-classpath: 类库路径, 这里需要注意,需要被切面的包得先加入

具体代码可以看github 最上面的链接

转载于:https://www.cnblogs.com/dikeboy/p/10650467.html

Android 面向切面编程-aspjectj应用相关推荐

  1. Android 面向切面编程(AOP)

    概念: AOP: Aspect Oriented Programming 面向切面编程. AOP是个概念,AspectJ 是它的一个具体实现.和Java配合使用. AspectJ:核心是他的编译器(a ...

  2. Android面向切面编程框架(AspectJ 讲解)

    安装AspectJ Pangu-Immortal (Pangu-Immortal) · GitHub Android上的ApsectJ开发由几部分组成,AspectJ gradle插件,ApsectJ ...

  3. 【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析

    文章目录 一.查看使用 AspectJ 后生成的 Class 字节码类 二.AspectJ 的本质 一.查看使用 AspectJ 后生成的 Class 字节码类 在 Android Studio 中查 ...

  4. 【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )

    文章目录 一.AspectJ 下载 二.拷贝 aspectjrt.jar 到 Android Studio 三.配置 Gradle 和 Gradle 插件版本 四.配置 Gradle 构建脚本 一.A ...

  5. 【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术

    文章目录 一.Android 中的 Java 源码打包流程 1.Java 源码打包流程 2.字符串常量池 二.Android 中的字节码操作方式 一.Android 中的 Java 源码打包流程 Ja ...

  6. 面向切面编程AspectJ在Android埋点的实践

    在项目开发中,对 App 客户端重构后,发现用于统计用户行为的友盟统计代码和用户行为日志记录代码分散在各业务模块中,比如在某个模块,要想实现对用户的行为一和行为二进行统计,因此按照OOP面向对象编程思 ...

  7. Android面向切面(AOP)编程实战

    转载自https://www.jianshu.com/p/b96a68ba50db AOP:面向切面编程(Aspect-Oriented Programming).如果说,OOP如果是把问题划分到单个 ...

  8. Android AOP 面向切面编程

    一.AOP即面向切面编程 AOP 是 Aspect Oriented Programming 的缩写,译为面向切面编程.用我们最常用的 OOP 来对比理解: 纵向关系 OOP,横向角度 AOP 举个例 ...

  9. AOP面向切面编程在Android开发中的应用

    面向切面编程-Aspect Oriented Programming,简称AOP,通过预编译的方式和运行期间动态代理实现程序功能的统一维护的一种技术. AOP能够做什么呢? 性能检测 权限验证 释放资 ...

最新文章

  1. Javascript 装饰器极速指南
  2. python json模块有什么用_Python的json模块及使用
  3. (笔记)电路设计(十四)之放大器的应用
  4. ActivityGroup 实现分页和自定义标签(内有GridView的点击背景样式的改变方法)
  5. 广州驾考科目三电子考16日全面启动
  6. 我的内核学习笔记9:Intel内部看门狗iTCO_wdt驱动
  7. 极客c语言课程设计,c语言课程设计之实习报告共5天完整.doc
  8. 小米相机曝光_小米11pro曝光,超级屏+双6400万+骁龙875,不愧是小米旗舰
  9. java实现rabbitmq简单队列模型,生产者 消费者 消息队列
  10. 重定向与请求转发的区别
  11. 使用 webSocket 连接菜鸟打印(并获取当前电脑连接的打印机信息)
  12. c语言头文件相互包含的后果,C语言头文件相互包含的问题
  13. Word2Vec模型配置参数
  14. 解决Server returned HTTP response code: 403 for URL报错
  15. 盘点市场营销工作中的5个办公神器
  16. 揭秘苹果回收实验室:87%的旧iPhone被翻新重售
  17. latex 分布符号_LaTeX最全的数学符号大全(更新中…… )
  18. TensorFlow 2.9的零零碎碎(一)-tf.keras里的兜兜转转
  19. socket系列之什么是socket
  20. linux下 etho网卡设置

热门文章

  1. 手机客户端测试考虑的点
  2. C#复制文件到指定文件夹
  3. 在一个类型的继承体系中,成员的构造顺序
  4. 学习PetShop3.0(2)宠物展示
  5. 历时7周,当然了真正的安装时间没这么多,终于把集群安装好了
  6. Shift键关闭大小写
  7. 2017-2018-1 20155301 《信息安全系统设计基础》第7周学习总结
  8. Android 布局以及优化资料汇总
  9. Hadoop Mapreduce分区、分组、二次排序过程详解
  10. 好文章,被架构师秒杀之后