热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android注解方法,一种基于注解的Android注入框架的制作方法

技术领域本发明涉及计算机软件技术领域,尤具体地说是一种基于注解的Android注入框架。背景技术:依赖注入一直是软件工程中的重要概念,随着

技术领域

本发明涉及计算机软件技术领域,尤具体地说是一种基于注解的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注入框架的权利要求书的且任何所述技术领域的普通技术人员对其所做的适当变化或替换,皆应落入本发明的专利保护范围。



推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
author-avatar
3051451abcd
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有