微前端架构如何改变企业的开发模式与效率提升
764
2022-10-30
Collector是一个基于注解的类信息收集框架
Nara(Android注解收集框架)
作者:戴益波
[TOC]
简介
Collector是一个基于注解的类信息收集框架。编码时将注解添加到类或方法上,运行时即可获取类或方法的信息了。收集到这些信息之后,可以完成其他上层框架的编写,例如EventBus基于注解的事件分发系统,Router的基于注解的路由框架等。
引用方式
Application&Library引入方式
项目根目录build.gradle中,添加公司maven仓库
allprojects { repositories { maven { url PUBLIC_REPOSITORY_URL } jcenter() }}// 其中:PUBLIC_REPOSITORY_URL=http://maven.daiyibo-/
项目根目录build.gradle中,添加gradle插件依赖
dependencies { classpath ('cn.daiyibo.android.annotation:nara-plugin:0.1.7') }
模块的build.gralde中,使用collector插件
apply plugin: 'plugin.nara'
Java-Library引入方式
项目根目录build.gradle中,添加公司maven仓库和gradle-plugin仓库
allprojects { repositories { maven { url PUBLIC_REPOSITORY_URL } jcenter() maven { url "https://plugins.gradle.org/m2/" } }}// 其中:PUBLIC_REPOSITORY_URL=http://maven.daiyibo-/
项目根目录build.gradle中,添加gradle插件依赖和apt插件依赖
dependencies { classpath ('cn.daiyibo.android.annotation:nara-plugin:0.1.7') classpath "net.ltgt.gradle:gradle-apt-plugin:0.6" }
模块的build.gralde中,使用apt插件和collector插件
// apt插件需要在collector插件之前,因为collect内部依赖apt插件apply plugin: "net.ltgt.apt"apply plugin: 'plugin.nara'
使用方法
Nara无需初始化操作,在首次调用Nara方法时,会借助类加载来进行初始化操作。Nara以静态方法为入口进行方法调用。类和方法的结构都通过接口展现,避免了对类和方法的数据修改操作。
默认注解
默认使用@Collect注解,@Collect注解存在value属性。
value:@Meta类型的数组,用于保存@Collect注解的额外信息
@Meta注解,以键值对的形式来存储@Collect的额外信息。name属性,表示Map-key。
// 类@Collect({ @Meta(name = "key1", booleans = true)})public class AnnotationBeanB extends AnnotationBeanA{}// 类@Collect({ @Meta(name = "key1", booleans = true)})public interface IAnnotationBeanD extends Serializable, Cloneable{}// 成员函数@Collect({ @Meta(name = "key1", booleans = true)})public
搜索类
用链式构造器的方式搜索类,通过group名,类的继承,类的注解这三个条件来进行搜索,获取符合条件类。还可以通过AnnotationFilter来自定义筛选类。
List
搜索函数
用链式构造器的方式搜索函数,通过group名,函数的注解这两个条件来进行搜索,获取符合条件函数。还可以通过AnnotationFilter来自定义筛选函数。
List
自定义注解
Nara可以处理自定义注解,极大的扩展注解处理器的使用场景。**自定义注解,目前只支持添加到类和方法上。如果添加到其他位置,编译器会报错。**自定义注解支持SOURCE,CLASS,RUNTIME三种类型。
// 自定义注解@Retention(RetentionPolicy.SOURCE)@Target(ElementType.METHOD)@ShadowBindingpublic @interface City { String str1() default "";}// 使用方式和普通注解一样@City(str1 = "anything")public void test1() { Log.e("daiyibo", "test1()");`}
添加比较器工厂
比较器工厂保存在一个FILO队列中,最后添加工厂会最先获取。寻找比较器时,会根据FILO队列规则,依次从队列里面获取工厂,根据工厂获取比较器。如果当前工厂获取不到比较器,则继续到下一个工厂进行查找,直至遍历所有工厂。
// 添加比较器方法如下Nara.addComparatorFactory(new ComparatorFactory() { @Override public Comparator
Log日志说明
// 表示收集自定义注解的时间collector find custom annotation cost time:XXX sec// 表示APT生成代码的时间collect apt cost time: XXX sec// 表示收集APT生成类的时间collect class cost time: XXX sec
注意事项
API Level >= 16要求JDK 7及以上
致谢
gson,感谢gson提供的泛型支持方式VirtualAPK,感谢VirtualAPK提供的插件dependeny搜集方式
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~