技术领域
本发明涉及计算机软件技术领域,尤具体地说是一种基于注解的Android注入框架。
背景技术:
依赖注入一直是软件工程中的重要概念,随着移动端开发越来越流行,Android开发流程中已经衍生出了很多框架,使用框架的目的一般是加快开发速度,而对于基于注解的依赖注入框架,注解的形式相比代码而言,更加简洁,因而在Android开发框架里经常被采用。
Android UI开发的过程中,常常需要对视图、监听器进行绑定,利用注解执行视图、监听器进行绑定的框架,不仅可以加快开发效率,而且能够提高代码的可读性,代码风格也会显得更加优雅。但根据调查,在国内还没有此类功能的开源框架,也没有找到详细的文档介绍这种技术;在国外,有一些开源的实现方案,例如ButterKnife、androidannotations等,完成度都很高,可以实现大部分视图和时间的绑定,但覆盖的功能不够全面,APP需要对重要权限进行申请才能够使用,从而导致存在冗余的代码,既有的框架很难去添加这些功能,这些框架本身就不够完善,只能依赖其他框架去完成这些事情。
技术实现要素:
本发明的技术任务是针对以上不足之处,提供一种基于注解的Android注入框架,该依赖注入框架利用注解执行视图、监听器的绑定,可以加快开发效率,提高代码可读性。
一种基于注解的Android注入框架,依赖APT工具(APT:Annotation Processing Tool,是一种处理注解的工具),将源程序中的注解的上下文提取出来,利用上下文的信息来实现注解中的语义,给成员变量或方法添加注解,并在注解中描述依赖关系,完成相关依赖的绑定;
其具体实施步骤如下:
S1:解析源码注解,获得注释包含信息;
S2:遍历每个注解的上下文,获取每个注解所在类的绝对路径;
S3:根据所在类的绝对路径进行分类,将所有注解上下文映射到Map中;
S4:构造辅助类实现自定义注解中蕴含的语义,添加构造器;
S5:在构造器中添加注解上下文所包含的信息,并在指定位置生成.java文件;
S6:进行视图的绑定以及监听器的添加。
优选的,框架在实现注解语义时,需要进行代码生成,采用JavaPoet框架进行代码生成,可以很方便地处理注解实现代码生成。
优选的,借助Bintray托管代码及框架,可以使框架更方便地被引用。
进一步的,框架实现过程中,具有四个核心类:
BlossomProcessor类,框架的核心解析器,用于抽离事先定义好的注释的上下文;
TypeElementContext类,用于存储所有的注解以及他们的上下文;
RedundantTiechecker类,用于校验注解的正确性,确保同一个注解不会多次绑定同一个ID;
ProcessMessager类,用于输出框架给使用者的提示,为不同场景构建不同的提示消息。
优选的,BlossomProcessor类对抽离出来的上下文按照所在的类、相关的注解进行分类,根据分好类的上下文信息,生成辅助类完成绑定任务。
优选的,TypeElementContext类存储所有的注解以及他们的上下文,建立上下文与注解的映射,用一个Map<Element,Class<extends Annotation>>来存储。
优选的,ProcessMessager输出框架给使用者的提示,提示等级分为:错误、警告和注意。
注解处理的阶段属于编译期间,不会影响Android APP运行效率;在Gradle中添加依赖,其他项目可以方便快捷地使用本框架。
本发明的一种基于注解的Android注入框架,具有以下优点:
该依赖注入框架基于Android平台开发,利用注解执行视图、监听器进行绑定的框架,不仅可以加快开发效率,而且能够提高代码的可读性,代码风格也会显得更加优雅;
框架在实现注解语义时,采用JavaPoet框架进行代码生成,可以很方便地处理注解实现代码生成;
借助Bintray托管代码及框架,使框架更方便地被引用;
该框架可以显著减少代码量,项目代码更加符合软件工程规划。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
附图1是本发明基于注解的Android注入框架流程图。
具体实施方式
为了使本技术领域的人员更好地理解本发明的方案,下面结合具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
一种基于注解的Android注入框架,依赖APT(Annotation Processing Tool)工具,将源程序中的注解的上下文提取出来,利用上下文的信息来实现注解中的语义,给成员变量或方法添加注解,并在注解中描述依赖关系,完成相关依赖的绑定;
框架在实现注解语义时,需要进行代码生成,采用JavaPoet框架进行代码生成,可以很方便地处理注解实现代码生成。
借助Bintray托管代码及框架,可以使框架更方便地被引用。
实现框架的具体步骤如下:
S1:解析源码注解,获得注释包含信息;
S2:遍历每个注解的上下文,获取每个注解所在类的绝对路径;
S3:根据所在类的绝对路径进行分类,将所有注解上下文映射到Map中;
S4:构造辅助类实现自定义注解中蕴含的语义,添加构造器;
S5:在构造器中添加注解上下文所包含的信息,并在指定位置生成.java文件;
S6:进行视图的绑定以及监听器的添加。
框架实现过程中,具有以下四个核心类:
BlossomProcessor类,框架的核心解析器,用于抽离事先定义好的注释的上下文;BlossomProcessor类对抽离出来的上下文按照所在的类、相关的注解进行分类,根据分好类的上下文信息,生成辅助类完成绑定任务。
TypeElementContext类,用于存储所有的注解以及他们的上下文;TypeElementContext类存储所有的注解以及他们的上下文,建立上下文与注解的映射,用一个Map<Element,Class<extends Annotation>>来存储。
RedundantTiechecker类,用于校验注解的正确性,确保同一个注解不会多次绑定同一个ID;
ProcessMessager类,用于输出框架给使用者的提示,为不同场景构建不同的提示消息,ProcessMessager输出框架给使用者的提示,提示等级分为:错误、警告和注意。
通过APP的启动效率,代码复杂度,代码量统计等多方面的测试,得到如下结果:注解处理的阶段属于编译期间,不会影响Android APP运行效率;在Gradle中添加依赖,其他项目可以方便快捷地使用本框架;框架可以显著减少代码量,项目代码更加符合软件工程规范。
上述具体实施方式仅是本发明的具体个案,本发明的专利保护范围包括但不限于上述具体实施方式,任何符合本发明的一种基于注解的Android注入框架的权利要求书的且任何所述技术领域的普通技术人员对其所做的适当变化或替换,皆应落入本发明的专利保护范围。