目录
0. 基础
最近系统学习了一下注解,包括运行时注解,主要还是编译时注解APT的学习。
首先是常用的有那些注解,Android support library中自带一些很有用的注解,详细的可以参考官方博客介绍:
https://developer.android.com/studio/write/annotations
https://developer.android.com/reference/android/support/annotation/package-summary
或者参考这篇博客:Android 中注解的使用
在学习网上的资料过程中,顺便一起学习了AOP,一直想系统学习一下AOP,所以先把觉得不错的博客记录一下:
关于运行时注解的文章可以参考鸿洋的:
Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (上)
Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (下)
Android 框架炼成 教你如何写组件间通信框架EventBus
安卓AOP三剑客:APT,AspectJ,Javassist
该博客不仅描述了以上内容,还例举了很多优秀的参考博客,这里我一并列出:
1. APT
在Android 打造编译时注解解析框架 这只是一个开始一文中,也介绍了编译时注解的大致写法,为了简化,不再自己去生成一些META-INF/services/javax.annotation.processing.Processor目录,可以使用Google开发的@AutoService(Processor.class)注解处理器,在process方法中,使用javapoet
可以更加简单得生成Java代码
这里推荐【Android】APT,及作者参考的文章:
编译期注解之APT
详细介绍编译时注解的使用方法
Android 编译时注解-提升
Android APT及基于APT的简单应用
Android 打造编译时注解解析框架 这只是一个开始
你必须知道的APT、annotationProcessor、android-apt、Provided、自定义注解
android-apt和annotationProcessor的使用以及互换
一个使用apt和代理来实现Repository层自动化的apt-delegate
2. AspectJ
代表框架: Hugo(Jake Wharton)
AspectJ支持编译期和加载时代码注入,在开始之前,我们先看看需要了解的词汇:
Advice(通知): 典型的 Advice 类型有 before、after 和 around,分别表示在目标方法执行之前、执行后和完全替代目标方法执行的代码。
Joint point(连接点): 程序中可能作为代码注入目标的特定的点和入口。
Pointcut(切入点): 告诉代码注入工具,在何处注入一段特定代码的表达式。
Aspect(切面): Pointcut 和 Advice 的组合看做切面。例如,在本例中通过定义一个 pointcut 和给定恰当的advice,添加一个了内存缓存的切面。
Weaving(织入): 注入代码(advices)到目标位置(joint points)的过程。
3. Javassist
代表框架:热修复框架HotFix 、Savior(InstantRun)等
4. AOP
AOP技术常用在以下方面:
1、日志记录:业务埋点
2、持久化
3、性能监控:性能日志
4、数据校验:方法的参数校验
5、缓存:内存缓存和持久缓存
6、权限检查:业务权限(如登陆,或用户等级)、系统权限(如拍照定位)
7、异常处理
利用AOP技术将这些功能代码从业务逻辑代码中划分出来,通过对这些行为的分离,可以将它们独立到非业务逻辑。无论是日后新增,或是修改,都手到擒来易如反掌
PS:刚发现一个歪果仁的框架 http://6thsolution.github.io/EasyMVP 基于Clean Architecture 用了apt、aspectj、javassisit 不多说赶紧看源代码学习去了https://github.com/6thsolution/EasyMVP/blob/master/README.md
全局路由TRouter,更优雅的页面跳转
加入OkBus,实现注解传递事件