什麼是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…