CN108469955B - 一种基于注解的Android注入框架实现方法 - Google Patents
一种基于注解的Android注入框架实现方法 Download PDFInfo
- Publication number
- CN108469955B CN108469955B CN201810204531.0A CN201810204531A CN108469955B CN 108469955 B CN108469955 B CN 108469955B CN 201810204531 A CN201810204531 A CN 201810204531A CN 108469955 B CN108469955 B CN 108469955B
- Authority
- CN
- China
- Prior art keywords
- annotation
- class
- framework
- context
- injection
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于注解的Android注入框架实现方法,属于计算机软件技术领域,依赖APT工具,将源程序中的注解的上下文提取出来,利用上下文的信息来实现注解中的语义,给成员变量或方法添加注解,并在注解中描述依赖关系,完成相关依赖的绑定。本发明利用注解执行视图、监听器进行绑定的框架,不仅可以加快开发效率,而且能够提高代码的可读性,代码风格也会显得更加优雅,可以在大多数Android项目中应用。
Description
技术领域
本发明涉及计算机软件技术领域,尤具体地说是一种基于注解的Android注入框架实现方法。
背景技术
依赖注入一直是软件工程中的重要概念,随着移动端开发越来越流行,Android开发流程中已经衍生出了很多框架,使用框架的目的一般是加快开发速度,而对于基于注解的依赖注入框架,注解的形式相比代码而言,更加简洁,因而在Android开发框架里经常被采用。
Android UI开发的过程中,常常需要对视图、监听器进行绑定,利用注解执行视图、监听器进行绑定的框架,不仅可以加快开发效率,而且能够提高代码的可读性,代码风格也会显得更加优雅。但根据调查,在国内还没有此类功能的开源框架,也没有找到详细的文档介绍这种技术;在国外,有一些开源的实现方案,例如ButterKnife、androidannotations等,完成度都很高,可以实现大部分视图和时间的绑定,但覆盖的功能不够全面,APP需要对重要权限进行申请才能够使用,从而导致存在冗余的代码,既有的框架很难去添加这些功能,这些框架本身就不够完善,只能依赖其他框架去完成这些事情。
发明内容
本发明的技术任务是针对以上不足之处,提供一种基于注解的Android注入框架实现方法,该依赖注入框架利用注解执行视图、监听器的绑定,可以加快开发效率,提高代码可读性。
一种基于注解的Android注入框架实现方法,依赖APT工具(APT:AnnotationProcessing 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 ProcessingTool)工具,将源程序中的注解的上下文提取出来,利用上下文的信息来实现注解中的语义,给成员变量或方法添加注解,并在注解中描述依赖关系,完成相关依赖的绑定;
框架在实现注解语义时,需要进行代码生成,采用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注入框架实现方法的权利要求书的且任何所述技术领域的普通技术人员对其所做的适当变化或替换,皆应落入本发明的专利保护范围。
Claims (7)
1.一种基于注解的Android注入框架实现方法,其特征在于依赖APT工具,将源程序中的注解的上下文提取出来,利用上下文的信息来实现注解中的语义,给成员变量或方法添加注解,并在注解中描述依赖关系,完成相关依赖的绑定;
其具体实施步骤如下:
S1:解析源码注解,获得注释包含信息;
S2:遍历每个注解的上下文,获取每个注解所在类的绝对路径;
S3:根据所在类的绝对路径进行分类,将所有注解上下文映射到Map中;
S4:构造辅助类实现自定义注解中蕴含的语义,添加构造器;
S5:在构造器中添加注解上下文所包含的信息,并在指定位置生成.java文件;
S6:进行视图的绑定以及监听器的添加。
2.根据权利要求1所述的一种基于注解的Android注入框架实现方法,其特征在于框架在实现注解语义时,采用JavaPoet框架进行代码生成。
3.根据权利要求1所述的一种基于注解的Android注入框架实现方法,其特征在于借助Bintray托管代码及框架。
4.根据权利要求1所述的一种基于注解的Android注入框架实现方法,其特征在于框架实现过程中,具有四个核心类:
BlossomProcessor类,框架的核心解析器,用于抽离事先定义好的注释的上下文;
TypeElementContext类,用于存储所有的注解以及他们的上下文;
RedundantTiechecker类,用于校验注解的正确性;
ProcessMessager类,用于输出框架给使用者的提示,为不同场景构建不同的提示消息。
5.根据权利要求4所述的一种基于注解的Android注入框架实现方法,其特征在于BlossomProcessor类对抽离出来的上下文按照所在的类、相关的注解进行分类,根据分好类的上下文信息,生成辅助类完成绑定任务。
6.根据权利要求4所述的一种基于注解的Android注入框架实现方法,其特征在于TypeElementContext类存储所有的注解以及他们的上下文,建立上下文与注解的映射。
7.根据权利要求1所述的一种基于注解的Android注入框架实现方法,其特征在于ProcessMessager类输出框架给使用者的提示,提示等级分为:错误、警告和注意。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810204531.0A CN108469955B (zh) | 2018-03-13 | 2018-03-13 | 一种基于注解的Android注入框架实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810204531.0A CN108469955B (zh) | 2018-03-13 | 2018-03-13 | 一种基于注解的Android注入框架实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108469955A CN108469955A (zh) | 2018-08-31 |
CN108469955B true CN108469955B (zh) | 2021-07-27 |
Family
ID=63264331
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810204531.0A Active CN108469955B (zh) | 2018-03-13 | 2018-03-13 | 一种基于注解的Android注入框架实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108469955B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109189379A (zh) * | 2018-09-04 | 2019-01-11 | 百度在线网络技术(北京)有限公司 | 代码生成方法和装置 |
CN109298860A (zh) * | 2018-09-27 | 2019-02-01 | 高新兴科技集团股份有限公司 | 基于Android系统的线程切换方法、装置及计算机存储介质 |
CN109739600B (zh) * | 2018-12-26 | 2022-02-25 | 网易传媒科技(北京)有限公司 | 数据处理方法、介质、装置和计算设备 |
CN111399902B (zh) * | 2020-03-25 | 2023-08-08 | 北京字节跳动网络技术有限公司 | 客户端源文件处理方法、装置、可读介质与电子设备 |
CN113032393B (zh) * | 2021-01-26 | 2024-01-02 | 苏州帝博信息技术有限公司 | 一种绑定关联对象的方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3009989A1 (en) * | 2014-10-16 | 2016-04-20 | Wipro Limited | System and method for distributed augmented reality |
CN106648682A (zh) * | 2016-12-29 | 2017-05-10 | 中南大学 | 一种面向嵌入式系统开发的动态数据通用框架 |
CN106648587A (zh) * | 2016-09-28 | 2017-05-10 | 福州宇嘉软件科技有限公司 | 一种基于注解的Web应用代码生成方法 |
-
2018
- 2018-03-13 CN CN201810204531.0A patent/CN108469955B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3009989A1 (en) * | 2014-10-16 | 2016-04-20 | Wipro Limited | System and method for distributed augmented reality |
CN106648587A (zh) * | 2016-09-28 | 2017-05-10 | 福州宇嘉软件科技有限公司 | 一种基于注解的Web应用代码生成方法 |
CN106648682A (zh) * | 2016-12-29 | 2017-05-10 | 中南大学 | 一种面向嵌入式系统开发的动态数据通用框架 |
Also Published As
Publication number | Publication date |
---|---|
CN108469955A (zh) | 2018-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108469955B (zh) | 一种基于注解的Android注入框架实现方法 | |
US20220027019A1 (en) | System and method for interface display screen manipulation | |
US10296307B2 (en) | Method and system for template extraction based on source code similarity | |
EP3433732B1 (en) | Converting visual diagrams into code | |
CN110008113B (zh) | 一种测试方法、装置、电子设备 | |
CN111414166B (zh) | 代码的生成方法、装置、设备及存储介质 | |
CN109739494B (zh) | 一种基于Tree-LSTM的API使用代码生成式推荐方法 | |
CN112394942A (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
CN110765010B (zh) | 基于Flink的可视化开发在线调试方法及装置 | |
CN112860264B (zh) | 一种抽象语法树重构方法及装置 | |
CN111143228B (zh) | 基于决策表法的测试代码生成方法及装置 | |
CN111400170B (zh) | 一种数据权限测试方法及装置 | |
CN107797805B (zh) | 一种代码封装方法、装置及计算机可读存储介质 | |
CN108459846B (zh) | 软件云定制方法及平台 | |
CN112199416A (zh) | 数据规则生成方法及装置 | |
CN116755669A (zh) | 一种基于dsl语言操作模型的低代码开发方法和工具 | |
CN117076338B (zh) | 基于kprobe的linux内核动态调试方法及系统 | |
CN109284222B (zh) | 软件单元、数据处理系统中的项目测试方法、装置及设备 | |
CN111078529A (zh) | 客户端写入模块测试方法、装置、电子设备 | |
CN113641594B (zh) | 跨端自动化测试方法以及相关装置 | |
CN110968342B (zh) | 一种版本比对方法、装置及系统 | |
CN114860566A (zh) | 源代码测试方法、装置、电子设备及存储介质 | |
KR100846203B1 (ko) | 모바일 어플리케이션의 생성 방법 및 이를 구현하기 위한프로그램을 기록한 기록매체 | |
CN110704742A (zh) | 一种特征提取方法及装置 | |
CN112925564B (zh) | 一种源代码的冗余导入类清理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |