[献丑了!] Android AOP注解GoodAt

1,144 阅读1分钟

什么是AOP

Aspect Oriented Programming,意为面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

什么是GoodAt

基于AOP,模仿JakeWharton大神的[hugo](https://github.com/JakeWharton/hugo),致力于减少代码量和便于统一管理的一个注解。

比较实用的注解

  1. @Intercept 用于拦截方法的执行,一般用于未登陆的拦截
    @Intercept(value = APP_LOGIN)
    public void goToMain(){
    }
  1. @NeedPermission 用于拦截方法的执行,假如有权限,直接执行方法,没有权限,则请求权限,成功后再执行
    @NeedPermission(Manifest.permission.CAMERA)
    public void takePohto(){
    }
  1. @ThrottleFirst 拦截重复方法,假如该方法已在限定时间内已执行过一次,则拦截该方法
    @ThrottleFirst(3000)
    public void doSomeThing(){
    }
  1. @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…