看一下这个注解是怎么定义的注解是支持有默认值的 , 因为kotlin的方法是可以在变量中直接赋初值的 , 这样调用就不用传值了 , 所以这里也做一个支持 , 让调用时候更加简洁

文章插图
生成流程

文章插图
代码的分析这里还是用ConfigService来分析

文章插图
- 1.首先流程图 , 我们会遍历出使用这个注解的类 , 此时我们就已经拿到了ConfigService这个元素的所有信息了 。
- 2.接着我们会对ConfigService将包装起来 , 将他存在RepositoryClass类中 。

文章插图
- 3.会将ConfigService里的方法包装成AutoMethod(不同的注解会有不同的类型) , 存入RepositoryClass的method变量中

文章插图

文章插图
通过上述操作后 , repositoryMap就存在所有使用过AutoAPi注解的类了 , 再将他做遍历 , 传入Repository类的生成器RepositoryClassBuilder

文章插图
这个如果不添加startFuncBuild方法的话 , 这段代码就只会生成
open class ConfigRepository : BaseRepository<ConfigService>() {}
文章插图
再来看看startFunBuild,根据你当前类中的方法使用的注解去选择对应的方法处理器

文章插图
所有的方法处理器都是继承AbsFuncBuilder的 而子类需要对方法内的具体内容做输出 , 也可以在方法参数上做添加

文章插图
AbsFuncBuilder类只会生成如下代码 , 他会将前面RepositoryMethod收集的信息做一个输出 。但是具体内容还是交由子类去输出的 , 因为每个注解对应输出的方法体是不一样的
suspend fun config2(page: String = "GS"): List<String> {// 具体内容是由子类完成的}2.NetStrategy注解这个注解可以传4个参数 strategy 是缓存策略 , effectiveTime是缓存时间 , timeUnit是时间单位 。缓存策略默认是添加在方法上的 , 有时候同一个接口可能会因为不同场景而使用不同的缓存策略 。
- 比如在刚进入主页时 , 使用页面初始化CacheFirst
- 页面初始化后 , 再次下拉加载数据 , 使用NetCache
- 在当前主页上拉加载 , 使用NetOnly
所以用isNeedAddParameter来判断 , 需不需要在方法参数中添加缓存策略的参数

文章插图
代码的分析NetStrategy的收集必须放在注解处理器的最后面 , 因为我展示想不到有什么好办法可以知道 , NetStrategy这个注解 , 是与哪个方法注解捆绑使用了 。
所以必须在前面的注解收集完毕后 , 当我再次收集使用过NetStrategy注解的方法时 , 拿到方法名 , 再与repositoryMap中储存的类的方法名做比较 , 如果一致 , 则表示该方法使用了NetStrategy注解 , 需要做缓存

文章插图
3.AutoFlowApi注解介绍使用注解生成的代码下面分析一下生成方法的各个方法

文章插图
viewModelScopeCoroutine
一个与viewmodel生命周期绑定的协程 , 默认在主线程运行
推荐阅读
- 鹿茸面膜使用方法是什么
- 使用面膜过敏的急救措施是什么
- 拉链拉不下来怎么办?
- Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
- Android开发:当前项目以Module形式引用别的项目的步骤
- MQTT协议使用总结
- 使用Redis时要避免的5个错误
- Linux进程管理
- 白帽黑客如何使用Dirbuster网站目录扫描神器
- 专门针对chrome谷歌浏览器而开发的一款访问插件
