什么是aop
AOP 即面向切面编程,它主要的作用是把一些具有相同属性或者相同功能的代码抽离出来划分到对应的模块里,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。如登录判断、权限判断
AspectJ就是AOP这种思想的一种实现框架。特点:是Java语言的无缝扩展,几乎是与Java完全一致的语言,兼容Java平台,易于学习使用,除了使用AspectJ特殊的语言外,AspectJ还支持原生的Java,只要加上对应的AspectJ注解就好。下面说下AspectJ的基本概念。
Aspect(切面):
- Aspect 声明类似于 Java 中的类声明。可以认为是Advice(通知)和Pointcut(切入点)的组合。例如,我们在应用中通过定义一个 Pointcut 和给定恰当的Advice,添加一个日志切面。
Joinpoint(连接点):
程序中可能作为代码注入目标的特定的点,例如一个方法调用或者方法入口。
Pointcut(切入点): - 简单来说是一段匹配规则,表示需要切入代码的地方。通常匹配规则为 :@注解 访问权限 返回值类型 包名.方法名(方法参数),后面返回值、包名什么的,支持通配符 * .. + 等
Advice(通知): - 或称为增强,在连接点上执行的行为,提供了在AOP中需要在切入点所选择的连接点处进行扩展的手段。
@Around: - 环绕插入:参数为ProceedingJoinPoint,可以手动包裹代码后,在需要的条件中调用参数的方法 proceed() 表示执行目标方法,如果我们需要在目标方法执行前执行某些通用的操作,执行完成后还需要返回目标方法的话,则使用该注解。
@Before:
- 前置插入,在切点前执行
@After:
- 后置插入:在切点后执行
@After returning:
- 在返回值之后执行
@After throwing:
- 在抛出异常后执行
使用前置条件-集成:
1.在项目根目录的build.gradle中增加依赖:
dependencies {
...
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.8'
}
项目地址:https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx
2.在主项目或者库的build.gradle中增加AspectJ的依赖:
dependencies {
...
implementation 'org.aspectj:aspectjrt:1.9.4'
}
项目地址:https://github.com/eclipse/org.aspectj
- 在主项目的build.gradle加入AspectJX模块:
apply plugin: 'android-aspectjx'
网友评论