什么是AOP
Aspect Oriented Programming,意为面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
什么是GoodAt
基于AOP,模仿JakeWharton大神的[hugo](https://github.com/JakeWharton/hugo),致力于减少代码量和便于统一管理的一个注解。
比较实用的注解
- @Intercept
用于拦截方法的执行,一般用于未登陆的拦截
@Intercept(value = APP_LOGIN)
public void goToMain(){
}
- @NeedPermission
用于拦截方法的执行,假如有权限,直接执行方法,没有权限,则请求权限,成功后再执行
@NeedPermission(Manifest.permission.CAMERA)
public void takePohto(){
}
- @ThrottleFirst
拦截重复方法,假如该方法已在限定时间内已执行过一次,则拦截该方法
@ThrottleFirst(3000)
public void doSomeThing(){
}
- @Tracking
追踪方法,打印该方法的入参,出参及执行时间
@Tracking(3000)
public void doSomeThing(int value){
}
引入
项目根目录 build.gradle
buildscript{
...
dependencies{
...
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'
}
}
模块build.gradle
apply plugin: 'android-aspectjx'
aspectjx {
include 'com.模块名'
include 'goodat.weaving'
}
dependencies{
...
implementation 'com.luckyaf:goodat:0.3.0'
}
初始化
GoodAt.setInterceptor {
return@setInterceptor when(it){
1 -> false
else -> true
}
}
GoodAt.setPermissionApply { permissions, callback ->
PermissionManager.fromTop().needPermissions(permissions)
.callback(object:PermissionManager.RequestCallback{
override fun onGranted() {
callback.onGranted()
}
override fun onDenied(
permissionsDeniedForever: MutableList<String>?,
permissionsDenied: MutableList<String>?
) {
}
}).request()
}
代码
github.com/luckyAF/Goo…