CN109597621A - 封装Dagger的方法、装置、Dagger、解耦方法、装置、设备及介质 - Google Patents
封装Dagger的方法、装置、Dagger、解耦方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN109597621A CN109597621A CN201810971690.3A CN201810971690A CN109597621A CN 109597621 A CN109597621 A CN 109597621A CN 201810971690 A CN201810971690 A CN 201810971690A CN 109597621 A CN109597621 A CN 109597621A
- Authority
- CN
- China
- Prior art keywords
- dagger
- autowire
- activity
- category information
- file
- 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.)
- Granted
Links
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本公开实施例公开了一种封装Dagger的方法、装置、封装Dagger、对MVP架构的解耦方法、装置、终端设备及存储介质。封装Dagger的方法包括:创建自定义注解AutoWire,所述AutoWire为编译时注解;创建AutoWire注解对应的注解处理器,所述注解处理器用于在编译时获取添加AutoWire注解的类信息;根据所述类信息,生成Dagger所需的Component文件和Module文件。本公开实施例实现了对Dagger的封装,而且可以自动生成Component文件和Module文件,解决了配置文件难以维护及人为管理易疏漏的问题,并减少研发的学习周期。
Description
技术领域
本公开实施例涉及计算机技术,尤其涉及一种封装Dagger的方法、装置、封装Dagger、对MVP架构的解耦方法、装置、终端设备及存储介质。
背景技术
针对项目变大后内部类太多,类与类之间出现多重依赖的问题,Google推出编译时注解版本的Dagger2方案,旨在以编译期生成代码替代原有的反射方案,不影响原有应用程序(Application,App)性能的前提下,解决依赖性问题,同时由于Android应用开发中大量采用MVP的架构,因此会频繁出现在MVP架构的基础上引入Dagger2,项目中需单独维护Dagger所需的Component和Module文件。
由于Dagger2要求我们为每个页面(或模块)配置Component和Module文件,随着业务的快速扩大,App内模块和页面也越来越多,手动维护这个配置列表将变得越发臃肿,难以维护,人为的管理同步也增加了疏漏的几率;Dagger2由于设计上的考虑,添加4个内部类来达到间接注入的目的,使得研发的学习周期较长。
发明内容
有鉴于此,本公开实施例提供一种封装Dagger的方法、装置、封装Dagger、对MVP架构的解耦方法、装置、终端设备及存储介质,以至少地解决上述问题。
第一方面,本公开实施例提供了一种封装Dagger的方法,所述方法包括:
创建自定义注解AutoWire,所述AutoWire为编译时注解;
创建AutoWire注解对应的注解处理器,所述注解处理器用于在编译时获取添加AutoWire注解的类信息;
根据所述类信息,生成Dagger所需的Component文件和Module文件。
可选的,还包括:
通过所述注解处理器将所述类信息作为Element输出;
通过所述注解处理器中的process方法将所述Element输出的类信息进行封装,得到传入参数;
解析所述传入参数,得到被注解的类信息。
可选的,根据所述类信息,生成Dagger所需的Component文件和Module文件,包括:
根据所述类信息,利用JavaPoet库生成Dagger所需的Component文件;
根据所述类信息,利用JavaPoet库生成Dagger所需的Module文件。
第二方面,本公开实施例还提供了一种封装的Dagger,所述封装的Dagger由本公开任一实施例所述的封装Dagger的方法封装而成。
第三方面,本公开实施例还提供了一种封装的Dagger对MVP架构的解耦方法,包括:
针对MVP架构,将Activity的基类对应的Activity实例注入所述Dagger中;
在编译时,通过所述Dagger中的注解处理器获取添加AutoWire注解的Activity的类信息,所述AutoWire注解为编译时注解,包括Activity对应的presenter参数和contract参数;
根据所述类信息,通过所述Dagger中的Module文件连接所述AutoWire注解的Activity的presenter参数和contract参数,并生成对应的连接类,通过所述Dagger中的Component文件对Activity进行注入操作。
可选的,在针对MVP架构,将Activity的基类对应的Activity实例注入所述Dagger中之前,还包括:
在所述Activity不存在基类时,创建所述Activity的基类。
可选的,通过所述Dagger中的Component文件对Activity进行注入操作,包括:
在所述基类中对添加AutoWire注解的Activity进行类型判断,并通过Dagger中的Component文件中的方法对判断为预设类型的Activity进行注入操作。
第四方面,本公开实施例还提供了一种封装Dagger的装置,所述装置包括:
注解创建模块,用于创建自定义注解AutoWire,所述AutoWire为编译时注解;
注解处理器创建模块,用于创建AutoWire注解对应的注解处理器,所述注解处理器用于在编译时获取添加AutoWire注解的类信息;
配置文件生成模块,用于根据所述类信息,生成Dagger所需的Component文件和Module文件。
可选的,还包括:
Element输出模块,用于通过所述注解处理器将所述类信息作为Element输出;
封装模块,用于通过所述注解处理器中的process方法将所述Element输出的类信息进行封装,得到传入参数;
解析模块,用于解析所述传入参数,得到被注解的类信息。
可选的,所述配置文件生成模块包括:
Component文件生成单元,用于根据所述类信息,利用JavaPoet库生成Dagger所需的Component文件;
Module文件生成单元,用于根据所述类信息,利用JavaPoet库生成Dagger所需的Module文件。
第五方面,本公开实施例还提供了一种封装的Dagger对MVP架构的解耦装置,所述装置包括:
实例注入模块,用于针对MVP架构,将Activity的基类对应的Activity实例注入所述Dagger中;
类信息获取模块,用于在编译时,通过所述Dagger中的注解处理器获取添加AutoWire注解的Activity的类信息,所述AutoWire注解为编译时注解,包括Activity对应的presenter参数和contract参数;
解耦模块,用于根据所述类信息,通过所述Dagger中的Module文件连接所述AutoWire注解的Activity的presenter参数和contract参数,并生成对应的连接类,通过所述Dagger中的Component文件对Activity进行注入操作。
可选的,还包括:
基类创建模块,用于在所述Activity不存在基类时,创建所述Activity的基类。
可选的,所述解耦模块包括:
类型判断单元,用于在所述基类中对添加AutoWire注解的Activity进行类型判断,并通过Dagger中的Component文件中的方法对判断为预设类型的Activity进行注入操作。
第六方面,本公开实施例还提供了一种终端设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本公开任一实施例所述的封装Dagger的方法或本公开任一实施例所述的Dagger对MVP架构的解耦方法。
第七方面,本公开实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本公开任一实施例所述的封装Dagger的方法或本公开任一实施例所述的Dagger对MVP架构的解耦方法。
本公开实施例的技术方案,通过创建自定义注解AutoWire,所述AutoWire注解为编译时注解,创建AutoWire注解对应的注解处理器,所述注解处理器用于在编译时获取添加AutoWire注解的类信息,根据所述类信息,生成Dagger所需的Component文件和Module文件,实现了对Dagger的封装,而且可以自动生成Component文件和Module文件,解决了配置文件难以维护及人为管理易疏漏的问题,并减少研发人员的学习周期。
附图说明
图1是本公开实施例提供的一种封装Dagger的方法的流程图;
图2是本公开实施例提供的一种封装的Dagger的结构示意图;
图3是本公开实施例提供的一种封装Dagger对MVP架构的解耦方法的流程图;
图4是本公开实施例提供的一种封装Dagger的装置的结构示意图;
图5是本公开实施例提供的一种封装Dagger对MVP架构的解耦装置的结构示意图;
图6是本公开实施例提供的一种终端设备的硬件结构示意图。
具体实施方式
下面结合附图和实施例对本公开作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本公开,而非对本公开的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本公开相关的部分而非全部内容。
图1是本公开实施例提供的一种封装Dagger的方法的流程图,该方法可以由封装Dagger的装置来执行,该装置可以由软件和/或硬件来实现,一般可集成在手机或平板电脑等终端设备中。该方法具体包括如下步骤:
步骤110,创建自定义注解AutoWire,所述AutoWire为编译时注解。
其中,Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和任何元数据(metadata)的途径和方法。Annotation(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotation对象,然后通过Annotation对象来获取注解里面的元数据。注解(annotation)是JDK5之后引进的,可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查,并应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。自定义注解包括编译时注解和运行时注解,编译时注解一般应用于编译器中。
创建自定义注解AutoWire,并且确保创建的AutoWire注解为编译时注解。AutoWire是计算机术语,AutoWire注解可以实现在依赖注入中自动装配依赖对象。
步骤120,创建AutoWire注解对应的注解处理器,所述注解处理器用于在编译时获取添加AutoWire注解的类信息。
其中,注解处理器是javac的一个工具,它用来在编译时扫描和处理注解。一个注解的注解处理器,以Java代码(或者编译过的字节码)作为输入,生成文件(通常是.java文件)作为输出。这些生成的Java代码是在生成的.java文件中,这些生成的Java文件,会同其他普通的手动编写的Java源代码一样被javac编译。
在创建AutoWire注解后,创建对应的注解处理器AbstractProcessor,注解处理器用于在编译时扫描和处理AutoWire注解,以编译过的字节码作为注解处理器的输入,生成文件作为输出,生成的文件为Java文件,生成的Java文件可以被javac编译。注解处理器在编译时扫描类包找到AutoWire注解的类并获取对应的类信息。其中,类信息包括类的名称、方法和属性。
步骤130,根据所述类信息,生成Dagger所需的Component文件和Module文件。
其中,Dagger是一个完全静态的,在编译时进行依赖注入的框架,原来由Square公司维护,为Dagger1版本,现在由Google维护,为Dagger2版本。Dagger2是一个依赖注入框架,在编译期间自动生成代码,负责依赖对象的创建。用Dagger2提供依赖,可以进一步解耦和方便测试,可以使用依赖注入的方式构建对象,而不使用new来创建依赖对象。在MVP架构中,Presenter层会持有View层和Model层的依赖,依赖注入主要用于解耦,通过依赖注入创建对象,不再使用new来创建对象。
根据类信息,自动生成Dagger所需的Component文件和Module文件。其中,Component文件和Module文件均为计算机术语,Module文件用于存储提供依赖的方法,Component文件是Component接口,提供Activity的注入方法。
其中,根据所述类信息,生成Dagger所需的Component文件和Module文件,可选包括:
根据所述类信息,利用JavaPoet库生成Dagger所需的Component文件;
根据所述类信息,利用JavaPoet库生成Dagger所需的Module文件。
其中,JavaPoet是一个用来生成Java源文件的Java API(ApplicationProgramming Interface,应用程序编程接口)。JavaPoet需要借助常用类来生成代码,4个常用类包括:MethodSpec、TypeSpec、FieldSpec和JavaFile,其中,MethodSpec代表一个构造函数或方法声明,TypeSpec代表一个类、接口或者枚举声明,FieldSpec代表一个成员变量,一个字段声明,JavaFile包含一个顶级类的Java文件。
根据添加AutoWire注解的类信息,利用JavaPoet库生成Dagger所需的Component文件,之后,再次根据添加AutoWire注解的类信息,利用JavaPoet库生成Dagger所需的Module文件,利用JavaPoet库可以方便的生成Dagger所需的Component文件和Module文件。
本实施例的技术方案,通过创建自定义注解AutoWire,所述AutoWire注解为编译时注解,创建AutoWire注解对应的注解处理器,所述注解处理器用于在编译时获取添加AutoWire注解的类信息,根据所述类信息,生成Dagger所需的Component文件和Module文件,实现了对Dagger的封装,而且可以自动生成Component文件和Module文件,解决了配置文件难以维护及人为管理易疏漏的问题,并减少研发的学习周期。
在上述技术方案的基础上,还可选包括:
通过所述注解处理器将所述类信息作为Element输出;
通过所述注解处理器中的process方法将所述Element输出的类信息进行封装,得到传入参数;
解析所述传入参数,得到被注解的类信息。
其中,Element为计算机术语,Element代表程序的元素,在注解处理过程中,编译器会扫描所有的Java源文件,并将源码中的每一个部分都看作特定类型的Element,它可以代表包、类、接口、方法、字段等多种元素种类,具体看getKind()方法中所指代的种类,每个Element代表一个静态的、语言级别的构件。process方法是注解处理器中扫描、解析及处理注解的核心方法。
所述注解处理器还用于将添加AutoWire注解的类信息作为Element输出,注解处理器中的process方法返回注解处理器扫描项目代码后,将Element输出的所有的类信息封装后得到传入参数(RoundEnvironment),对传入参数进行进一步解析,获取被注解的类信息,便于后续根据被注解的类信息生成Dagger所需的Component文件和Module文件。
图2是本公开实施例提供的一种封装的Dagger的结构示意图,本实施例所述的封装的Dagger由本公开实施例提供的封装Dagger的方法封装而成,如图2所示,本公开实施例提供的封装的Dagger包括自定义注解AutoWire 210、注解处理器220和文件生成模块230。
其中,自定义注解AutoWire 210为编译时注解。注解处理器220用于在编译时扫描类包找到AutoWire注解的类并获取对应的类信息,将类信息作为Element输出,通过process方法将Element输出的所有添加AutoWire注解的类信息进行封装得到传入参数,并对传入参数进行进一步解析,获取被注解的类信息。文件生成模块230用于根据添加AutoWire注解的类信息,利用JavaPoet库生成Dagger所需的Component文件,再次根据添加AutoWire注解的类信息,利用JavaPoet库生成Dagger所需的Module文件。
本实施例的技术方案,封装的Dagger定义了自定义注解AutoWire,在使用封装的Dagger时只需要在需要的位置添加AutoWire注解,便可以自动生成Dagger所需的Component文件和Module文件,研发人员不必再刻意学习Dagger,减少了研发人员的学习周期,而且封装的Dagger可以根据添加AutoWire注解的类信息自动生成对应的Component文件和Module文件,解决了配置文件难以维护及人为管理易疏漏的问题。
图3是本公开实施例提供的一种封装Dagger对MVP架构的解耦方法的流程图,所述封装Dagger为本公开实施例提供的封装的Dagger,本实施例适用于利用Dagger对MVP架构解耦的情况,该方法可以由封装Dagger对MVP架构的解耦装置来执行,该装置可以由软件和/或硬件来实现,一般可集成在手机或平板电脑等终端设备中。该方法具体包括如下步骤:
步骤310,针对MVP架构,将Activity的基类对应的Activity实例注入所述Dagger中。
其中,MVP(Model View Presenter)架构包括View层(也称为视图层)、Model层(也称为数据层)和Presenter层,其中,View层主要负责界面的显示及跟数据无关的逻辑,比如设置控件的点击事件等;Presenter层主要负责View层与Model层的交互,如从Model层获得所需要的数据,进行一些适当的处理后交由View层进行显示;Model层为数据部分,负责对数据的存取操作,例如对数据库的读写等。MVP架构的核心是:View层不持有Model层对象任何引用,参数里面和临时变量里可以有Model层对象,只持有Presenter层对象引用,任何需要更新或者操作数据的,都间接通过Presenter对象去操作数据;Presenter层持有View层对象的引用,Model层会把想要更新View的操作委托Presenter去操作,而Presenter层会把更新View操作交给View层对象去操作。
Activity是Android组件中最基本也是最为常见的四大组件之一。Android四大组件有Activity、Service服务、Content Provider内容提供及BroadcastReceiver广播接收器。Activity是一个应用程序组件,提供一个屏幕,Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,在一个Android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。
相关技术中,在对Activity进行注入时,需要对每个Activity进行注入,导致Dagger代码侵入性较强。本公开实施例中,针对MVP架构,将Activity的基类即BaseActivity对应的Activity实例注入封装后的Dagger中,BaseActivity的子类即Activity继承于基类的注入,从而不需要对每个Activity进行单独注入,解决了Dagger代码侵入性的问题。
步骤320,在编译时,通过所述Dagger中的注解处理器获取添加AutoWire注解的Activity的类信息,所述AutoWire注解为编译时注解,包括Activity对应的presenter参数和contract参数。
其中,类信息包括名称、方法和属性。presenter和contract为MVP架构中的术语,contract描述了View层和Presenter层之间的交互,presenter参数用于实现Presenter层的实例化。
在需要解耦的Activity上添加AutoWire注解,并在AutoWire注解中填写对应的presenter参数和contract参数,在编译时,通过封装的Dagger中的注解处理器扫描项目代码,获取添加AutoWire注解的Activity及对应的类信息。
步骤330,根据所述类信息,通过所述Dagger中的Module文件连接所述AutoWire注解的Activity的presenter参数和contract参数,并生成对应的连接类,通过所述Dagger中的Component文件对Activity进行注入操作。
其中,Module文件用于存储提供依赖的方法,Component文件是Component接口,提供Activity的注入方法。
根据扫描到的添加AutoWire注解的类信息,通过Dagger中的Module文件中的方法连接添加AutoWire注解的Activity的presenter参数和contract参数,连接Model层、View层和Presenter层,从而在生成的Module文件中提供对应的presenter实例和contract实例,再在自动生成的Component文件中针对AutoWire注解的Activity进行类型判断后对Activity进行注入操作,从而完成MVP架构的所有自动实例注入。
本实施例的技术方案,通过针对MVP架构,将Activity的基类对应的Activity实例注入Dagger中,在编译时通过Dagger中的注解处理器获取添加AutoWire注解的Activity的类信息,根据所述类信息,通过Dagger中的Module文件链接AutoWire注解的Activity的presenter参数和contract参数,生成对应的连接类,实现了对MVP架构的自动实例的注入,实现了通过Dagger解耦MVP架构中View层、Presenter层和Model层的相互依赖,解决了Dagger代码侵入性的问题,而且研发过程中无需再面对复杂的Dagger2,当项目中的Presenter类和Model类的数量足够多时将带来可观的优势。
在上述技术方案的基础上,在针对MVP架构,将Activity的基类对应的Activity实例注入所述Dagger中之前,还可选包括:
在所述Activity不存在基类时,创建所述Activity的基类。
在Activity存在基类BaseActivity时,可以直接将基类对应的Activity实例注入Dagger中,在Activity不存在基类时,首先创建Activity的基类BaseActivity,并将基类对应的Activity实例注入Dagger中,解决了Dagger代码侵入性的问题。
在上述技术方案的基础上,通过所述Dagger中的Component文件对Activity进行注入操作,可选包括:
在所述基类中对添加AutoWire注解的Activity进行类型判断,并通过Dagger中的Component文件中的方法对判断为预设类型的Activity进行注入操作。
其中,类型判断即instanceof判断,A instanceof B中,A是一个对象,B是一个类,A instanceof B表示判断A这个对象是否是B这个类的实例。Component文件中的方法可以为inject方法,所述inject方法给出了具体的注入方式。
在基类中对添加AutoWire注解的Activity进行类型判断,判断得到为预设类型的Activity,通过Dagger中的Component文件中的inject方法对此具体的Activity进行注入操作。
示例性的,假设基类为动物,而对应的子类包括狗、猫、猪等,而需要对狗进行注入,这时就需要进行类型判断,对判断为预设类型即为狗的子类进行注入,而不是对所有子类进行注入。
通过Dagger中的自定义注解生成一个类来进行自动instanceof判断,这个类可以命名为BaseAutoActivity,通过自定义注解首先搜集所有添加AutoWire注解的Activity,然后在BaseAutoActivity中对搜集到的每个Activity进行instanceof判断,根据判断后得知的具体子类进行注入操作,从而完成对所有Activity的自动注入,解决了Dagger中不能注入抽象的基类的问题。
图4是本公开实施例提供的一种封装Dagger的装置的结构示意图,该装置可以执行封装Dagger的方法,该装置可以由软件和/或硬件来实现,一般可集成在手机或平板电脑等终端设备中。如图4所示,本实施例所述的封装Dagger的装置包括:注解创建模块410、注解处理器创建模块420和配置文件生成模块430。
其中,注解创建模块410,用于创建自定义注解AutoWire,所述AutoWire为编译时注解;
注解处理器创建模块420,用于创建AutoWire注解对应的注解处理器,所述注解处理器用于在编译时获取添加AutoWire注解的类信息;
配置文件生成模块430,用于根据所述类信息,生成Dagger所需的Component文件和Module文件。
可选的,还包括:
Element输出模块,用于通过所述注解处理器将所述类信息作为Element输出;
封装模块,用于通过所述注解处理器中的process方法将所述Element输出的类信息进行封装,得到传入参数;
解析模块,用于解析所述传入参数,得到被注解的类信息。
可选的,所述配置文件生成模块包括:
Component文件生成单元,用于根据所述类信息,利用JavaPoet库生成Dagger所需的Component文件;
Module文件生成单元,用于根据所述类信息,利用JavaPoet库生成Dagger所需的Module文件。
上述封装Dagger的装置可执行本公开任意实施例所提供的封装Dagger的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本公开任意实施例提供的封装Dagger的方法。
图5是本公开实施例提供的一种封装Dagger对MVP架构的解耦装置的结构示意图,所述封装Dagger为本公开实施例提供的封装的Dagger,本实施例适用于利用Dagger对MVP架构解耦的情况,该装置可以执行封装Dagger对MVP架构的解耦方法,该装置可以由软件和/或硬件来实现,一般可集成在手机或平板电脑等终端设备中。如图5所示,本实施例所述的封装Dagger对MVP架构的解耦装置包括:实例注入模块510、类信息获取模块520和解耦模块530。
其中,实例注入模块510,用于针对MVP架构,将Activity的基类对应的Activity实例注入所述Dagger中;
类信息获取模块520,用于在编译时,通过所述Dagger中的注解处理器获取添加AutoWire注解的Activity的类信息,所述AutoWire注解为编译时注解,包括Activity对应的presenter参数和contract参数;
解耦模块530,用于根据所述类信息,通过所述Dagger中的Module文件连接所述AutoWire注解的Activity的presenter参数和contract参数,并生成对应的连接类,通过所述Dagger中的Component文件对Activity进行注入操作。
可选的,还包括:
基类创建模块,用于在所述Activity不存在基类时,创建所述Activity的基类。
可选的,所述解耦模块包括:
类型判断单元,用于在所述基类中对添加AutoWire注解的Activity进行类型判断,并通过Dagger中的Component文件中的方法对判断为预设类型的Activity进行注入操作。
上述封装Dagger对MVP架构的解耦装置可执行本公开任意实施例所提供的封装Dagger对MVP架构的解耦方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本公开任意实施例提供的封装Dagger对MVP架构的解耦方法。
图6是本公开实施例提供的一种终端设备的硬件结构示意图。终端设备可以以各种形式来实施,本公开中的终端设备可以包括但不限于诸如移动电话、智能电话、笔记本电脑、数字广播接收器、PDA(Personal Digital Assistant,个人数字助理)、PAD(平板电脑)、PMP(Portable Multimedia Player,便携式多媒体播放器)、导航装置、车载终端设备、车载显示终端、车载电子后视镜等等的移动终端设备以及诸如数字TV、台式计算机等等的固定终端设备。
如图6所示,终端设备600可以包括无线通信单元610、A/V(音频/视频)输入单元620、用户输入单元630、感测单元640、输出单元650、存储器660、接口单元670、处理器680和电源单元690等等。图6示出了具有各种组件的终端设备,但是应理解的是,并不要求实施所有示出的组件,可以替代地实施更多或更少的组件。
其中,无线通信单元610允许终端设备600与无线通信系统或网络之间的无线电通信。A/V输入单元620用于接收音频或视频信号。用户输入单元630可以根据用户输入的命令生成键输入数据以控制终端设备的各种操作。感测单元640检测终端设备600的当前状态、终端设备600的位置、用户对于终端设备600的触摸输入的有无、终端设备600的取向、终端设备600的加速或减速移动和方向等等,并且生成用于控制终端设备600的操作的命令或信号。接口单元670用作至少一个外部装置与终端设备600连接可以通信的接口。输出单元650被构造为以视觉、音频和/或触觉方式提供输出信号。存储器660可以存储由处理器680执行的处理和控制操作的软件程序等等,或者可以暂时地存储己经输出或将要输出的数据。存储器660可以包括至少一种类型的存储介质。而且,终端设备600可以与通过网络连接执行存储器660的存储功能的网络存储装置协作。处理器680通常控制终端设备的总体操作。另外,处理器680可以包括用于再现或回放多媒体数据的多媒体模块。处理器680可以执行模式识别处理,以将在触摸屏上执行的手写输入或者图片绘制输入识别为字符或图像。电源单元690在处理器680的控制下接收外部电力或内部电力并且提供操作各元件和组件所需的适当的电力。
处理器680通过运行存储在存储器660中的程序,从而执行终端设备600的各种功能应用以及数据处理,例如实现本公开实施例所提供的一种封装Dagger的方法或者一种Dagger对MVP架构的解耦方法。其中,一种封装Dagger的方法,包括:
创建自定义注解AutoWire,所述AutoWire为编译时注解;
创建AutoWire注解对应的注解处理器,所述注解处理器用于在编译时获取添加AutoWire注解的类信息;
根据所述类信息,生成Dagger所需的Component文件和Module文件。
一种Dagger对MVP架构的解耦方法,包括:
针对MVP架构,将Activity的基类对应的Activity实例注入所述Dagger中;
在编译时,通过所述Dagger中的注解处理器获取添加AutoWire注解的Activity的类信息,所述AutoWire注解为编译时注解,包括Activity对应的presenter参数和contract参数;
根据所述类信息,通过所述Dagger中的Module文件连接所述AutoWire注解的Activity的presenter参数和contract参数,并生成对应的连接类,通过所述Dagger中的Component文件对Activity进行注入操作。
本公开实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种封装Dagger的方法或者一种Dagger对MVP架构的解耦方法。其中,一种封装Dagger的方法,包括:
创建自定义注解AutoWire,所述AutoWire为编译时注解;
创建AutoWire注解对应的注解处理器,所述注解处理器用于在编译时获取添加AutoWire注解的类信息;
根据所述类信息,生成Dagger所需的Component文件和Module文件。
一种Dagger对MVP架构的解耦方法,包括:
针对MVP架构,将Activity的基类对应的Activity实例注入所述Dagger中;
在编译时,通过所述Dagger中的注解处理器获取添加AutoWire注解的Activity的类信息,所述AutoWire注解为编译时注解,包括Activity对应的presenter参数和contract参数;
根据所述类信息,通过所述Dagger中的Module文件连接所述AutoWire注解的Activity的presenter参数和contract参数,并生成对应的连接类,通过所述Dagger中的Component文件对Activity进行注入操作。
当然,本公开实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本公开任意实施例所提供的封装Dagger的方法或者Dagger对MVP架构的解耦方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本公开可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述的方法。
值得注意的是,上述封装Dagger的装置或者Dagger对MVP架构的解耦装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本公开的保护范围。
注意,上述仅为本公开的较佳实施例及所运用技术原理。本领域技术人员会理解,本公开不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本公开的保护范围。因此,虽然通过以上实施例对本公开进行了较为详细的说明,但是本公开不仅仅限于以上实施例,在不脱离本公开构思的情况下,还可以包括更多其他等效实施例,而本公开的范围由所附的权利要求范围决定。
Claims (11)
1.一种封装Dagger的方法,其特征在于,包括:
创建自定义注解AutoWire,所述AutoWire为编译时注解;
创建AutoWire注解对应的注解处理器,所述注解处理器用于在编译时获取添加AutoWire注解的类信息;
根据所述类信息,生成Dagger所需的Component文件和Module文件。
2.根据权利要求1所述的方法,其特征在于,还包括:
通过所述注解处理器将所述类信息作为Element输出;
通过所述注解处理器中的process方法将所述Element输出的类信息进行封装,得到传入参数;
解析所述传入参数,得到被注解的类信息。
3.根据权利要求1所述的方法,其特征在于,根据所述类信息,生成Dagger所需的Component文件和Module文件,包括:
根据所述类信息,利用JavaPoet库生成Dagger所需的Component文件;
根据所述类信息,利用JavaPoet库生成Dagger所需的Module文件。
4.一种通过如权利要求1-3任一所述的封装Dagger的方法封装的Dagger。
5.一种如权利要求4所述的Dagger对MVP架构的解耦方法,其特征在于,所述方法包括:
针对MVP架构,将Activity的基类对应的Activity实例注入所述Dagger中;
在编译时,通过所述Dagger中的注解处理器获取添加AutoWire注解的Activity的类信息,所述AutoWire注解为编译时注解,包括Activity对应的presenter参数和contract参数;
根据所述类信息,通过所述Dagger中的Module文件连接所述AutoWire注解的Activity的presenter参数和contract参数,并生成对应的连接类,通过所述Dagger中的Component文件对Activity进行注入操作。
6.根据权利要求5所述的方法,其特征在于,在针对MVP架构,将Activity的基类对应的Activity实例注入所述Dagger中之前,还包括:
在所述Activity不存在基类时,创建所述Activity的基类。
7.根据权利要求5所述的方法,其特征在于,通过所述Dagger中的Component文件对Activity进行注入操作,包括:
在所述基类中对添加AutoWire注解的Activity进行类型判断,并通过Dagger中的Component文件中的方法对判断为预设类型的Activity进行注入操作。
8.一种封装Dagger的装置,其特征在于,所述装置包括:
注解创建模块,用于创建自定义注解AutoWire,所述AutoWire为编译时注解;
注解处理器创建模块,用于创建AutoWire注解对应的注解处理器,所述注解处理器用于在编译时获取添加AutoWire注解的类信息;
配置文件生成模块,用于根据所述类信息,生成Dagger所需的Component文件和Module文件。
9.一种如权利要求4所述的Dagger对MVP架构的解耦装置,其特征在于,所述装置包括:
实例注入模块,用于针对MVP架构,将Activity的基类对应的Activity实例注入所述Dagger中;
类信息获取模块,用于在编译时,通过所述Dagger中的注解处理器获取添加AutoWire注解的Activity的类信息,所述AutoWire注解为编译时注解,包括Activity对应的presenter参数和contract参数;
解耦模块,用于根据所述类信息,通过所述Dagger中的Module文件连接所述AutoWire注解的Activity的presenter参数和contract参数,并生成对应的连接类。
10.一种终端设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-3任一所述的封装Dagger的方法或如权利要求5-7任一所述的Dagger对MVP架构的解耦方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1-3任一所述的封装Dagger的方法或如权利要求5-7任一所述的Dagger对MVP架构的解耦方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810971690.3A CN109597621B (zh) | 2018-08-24 | 2018-08-24 | 封装Dagger的方法、装置、终端设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810971690.3A CN109597621B (zh) | 2018-08-24 | 2018-08-24 | 封装Dagger的方法、装置、终端设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109597621A true CN109597621A (zh) | 2019-04-09 |
CN109597621B CN109597621B (zh) | 2022-10-14 |
Family
ID=65956360
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810971690.3A Active CN109597621B (zh) | 2018-08-24 | 2018-08-24 | 封装Dagger的方法、装置、终端设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109597621B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110113419A (zh) * | 2019-05-08 | 2019-08-09 | 广西壮族自治区基础地理信息中心 | 一种基于Android的CORS账号管理系统及其设计方法 |
CN111367590A (zh) * | 2020-02-27 | 2020-07-03 | 北京字节跳动网络技术有限公司 | 中断事件处理方法及其装置 |
CN111596906A (zh) * | 2020-05-18 | 2020-08-28 | 上海微盟企业发展有限公司 | 一种基于MVPVM的Android应用开发方法、装置、设备及介质 |
CN111782196A (zh) * | 2020-07-08 | 2020-10-16 | 上海乾臻信息科技有限公司 | 基于mvp架构的开发方法及装置 |
CN111796865A (zh) * | 2020-06-28 | 2020-10-20 | 北京字节跳动网络技术有限公司 | 一种字节码文件修改方法、装置、终端设备及介质 |
WO2024045379A1 (zh) * | 2022-08-31 | 2024-03-07 | 蚂蚁区块链科技(上海)有限公司 | 编译方法和编译器、Wasm虚拟机 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104169912A (zh) * | 2012-03-27 | 2014-11-26 | 株式会社东芝 | 信息处理终端和方法,以及信息管理设备和方法 |
CN104317941A (zh) * | 2014-10-31 | 2015-01-28 | 新华瑞德(北京)网络科技有限公司 | 应用程序的资源注入方法及装置 |
CN105957409A (zh) * | 2016-04-25 | 2016-09-21 | 北京葡萄藤信息技术有限公司 | 一种基于任务分配的自动教学方法及平台 |
CN106649125A (zh) * | 2016-12-28 | 2017-05-10 | 上海携程国际旅行社有限公司 | 创建支持多平台的自动化测试脚本的方法及其框架系统 |
CN107273138A (zh) * | 2017-07-04 | 2017-10-20 | 杭州铜板街互联网金融信息服务有限公司 | 基于Android业务模块间交互的解耦方法和系统 |
CN107704393A (zh) * | 2017-09-29 | 2018-02-16 | 武汉斗鱼网络科技有限公司 | 数据测试方法、装置及电子设备 |
US20180053172A1 (en) * | 2016-08-18 | 2018-02-22 | Comenity Llc | Seamless integration of financial information within a mobile retail application framework |
CN107741847A (zh) * | 2017-10-11 | 2018-02-27 | 江苏千米网络科技股份有限公司 | 实现领域驱动模型的方法及装置 |
US20180081785A1 (en) * | 2016-09-16 | 2018-03-22 | Oracle International Corporation | Metadata application constraints within a module system based on modular dependencies |
CN207607624U (zh) * | 2017-12-13 | 2018-07-13 | 河海大学 | 无人船拖曳滑缆水下机器人立体海洋监测系统 |
-
2018
- 2018-08-24 CN CN201810971690.3A patent/CN109597621B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104169912A (zh) * | 2012-03-27 | 2014-11-26 | 株式会社东芝 | 信息处理终端和方法,以及信息管理设备和方法 |
CN104317941A (zh) * | 2014-10-31 | 2015-01-28 | 新华瑞德(北京)网络科技有限公司 | 应用程序的资源注入方法及装置 |
CN105957409A (zh) * | 2016-04-25 | 2016-09-21 | 北京葡萄藤信息技术有限公司 | 一种基于任务分配的自动教学方法及平台 |
US20180053172A1 (en) * | 2016-08-18 | 2018-02-22 | Comenity Llc | Seamless integration of financial information within a mobile retail application framework |
US20180081785A1 (en) * | 2016-09-16 | 2018-03-22 | Oracle International Corporation | Metadata application constraints within a module system based on modular dependencies |
CN106649125A (zh) * | 2016-12-28 | 2017-05-10 | 上海携程国际旅行社有限公司 | 创建支持多平台的自动化测试脚本的方法及其框架系统 |
CN107273138A (zh) * | 2017-07-04 | 2017-10-20 | 杭州铜板街互联网金融信息服务有限公司 | 基于Android业务模块间交互的解耦方法和系统 |
CN107704393A (zh) * | 2017-09-29 | 2018-02-16 | 武汉斗鱼网络科技有限公司 | 数据测试方法、装置及电子设备 |
CN107741847A (zh) * | 2017-10-11 | 2018-02-27 | 江苏千米网络科技股份有限公司 | 实现领域驱动模型的方法及装置 |
CN207607624U (zh) * | 2017-12-13 | 2018-07-13 | 河海大学 | 无人船拖曳滑缆水下机器人立体海洋监测系统 |
Non-Patent Citations (7)
Title |
---|
DIMON’S PROGRAM BASEMENT: ""MVVM 架构,ViewModel 和LiveData 第二部分(译)"", 《HTTPS://DIMON94.GITHUB.IO/2018/05/20/MVVM%20%E6%9E%B6%E6%9E%84%EF%BC%8CVIEWMODEL%20%E5%92%8C%20LIVEDATA%20%E7%AC%AC%E4%BA%8C%E9%83%A8%E5%88%86(%E8%AF%91)》 * |
HELONGHUI: ""详解Dagger2"", 《HTTPS://GITHUB.COM/HEHONGHUI/ANDROID-TECH-FRONTIER/BLOB/MASTER/ISSUE-11/%E8%AF%A6%E8%A7%A3DAGGER2.MD》 * |
JESSYAN: ""有几个基类, 用Dagger注入几个工具类就敢叫MVP+Dagger框架? |掘金技术征"", 《HTTPS://JUEJIN.CN/POST/6844903457346813966》 * |
KHALED BAKHIT等: ""DAGGER: Distributed Architecture for Granular Mitigation of Mobile Based Attacks"", 《2014 IEEE/ACS 11TH INTERNATIONAL CONFERENCE ON COMPUTER SYSTEMS AND APPLICATIONS (AICCSA)》 * |
TINYFIGHT: "Dagger依赖注入详解(三)", 《HTTPS://WWW.JIANSHU.COM/P/96EA30F68E32》 * |
乐小文: "Dagger2依赖注入解析之MVP模式解耦", 《HTTPS://WWW.JIANSHU.COM/P/F2677BF255D9》 * |
范磊: "《Android应用开发进阶》", 31 May 2018, 电子工业出版社 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110113419A (zh) * | 2019-05-08 | 2019-08-09 | 广西壮族自治区基础地理信息中心 | 一种基于Android的CORS账号管理系统及其设计方法 |
CN111367590A (zh) * | 2020-02-27 | 2020-07-03 | 北京字节跳动网络技术有限公司 | 中断事件处理方法及其装置 |
CN111596906A (zh) * | 2020-05-18 | 2020-08-28 | 上海微盟企业发展有限公司 | 一种基于MVPVM的Android应用开发方法、装置、设备及介质 |
CN111596906B (zh) * | 2020-05-18 | 2023-07-07 | 上海微盟企业发展有限公司 | 一种基于MVPVM的Android应用开发方法、装置、设备及介质 |
CN111796865A (zh) * | 2020-06-28 | 2020-10-20 | 北京字节跳动网络技术有限公司 | 一种字节码文件修改方法、装置、终端设备及介质 |
CN111796865B (zh) * | 2020-06-28 | 2024-04-16 | 北京字节跳动网络技术有限公司 | 一种字节码文件修改方法、装置、终端设备及介质 |
CN111782196A (zh) * | 2020-07-08 | 2020-10-16 | 上海乾臻信息科技有限公司 | 基于mvp架构的开发方法及装置 |
WO2024045379A1 (zh) * | 2022-08-31 | 2024-03-07 | 蚂蚁区块链科技(上海)有限公司 | 编译方法和编译器、Wasm虚拟机 |
Also Published As
Publication number | Publication date |
---|---|
CN109597621B (zh) | 2022-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109597621A (zh) | 封装Dagger的方法、装置、Dagger、解耦方法、装置、设备及介质 | |
US11656859B2 (en) | Data model API for live applications in a cloud collaboration platform | |
CN110825362B (zh) | 低代码应用软件开发系统及方法 | |
Goncalves | Beginning Java EE 6 Platform with GlassFish 3: from novice to professional | |
US9471345B2 (en) | Runtime generation and injection of java annotations | |
CN101965561A (zh) | 用于异步方法的声明性支持 | |
CN108874464A (zh) | 中间件自动扫描装配方法、装置及存储介质 | |
Del Sole | Microsoft computer vision APIs distilled: Getting started with cognitive services | |
CN109684192A (zh) | 基于数据处理的本地测试方法、设备、存储介质及装置 | |
US20140215433A1 (en) | Class oriented file format for modeling and persisting bpmn scripting code | |
Cimino et al. | An efficient model-based methodology for developing device-independent mobile applications | |
CN112241373A (zh) | 自动化测试方法、测试装置、处理器和测试系统 | |
CN112748946A (zh) | 应用程序安装文件生成方法和装置、计算设备、存储介质 | |
CN106775608A (zh) | 独立系统进程的实现方法和装置 | |
Cirilo et al. | Model driven RichUbi: a model driven process for building rich interfaces of context-sensitive ubiquitous applications | |
CN114721647A (zh) | 一种基于无代码应用开发的面向对象编程方法 | |
CN109960503A (zh) | 基于Django框架的组件开发方法及装置 | |
Lee et al. | Design and implementation of the WIPI-to-Android automatic mobile game converter for the contents compatibility in the heterogeneous mobile OS | |
Walther | ASP. Net 2.0 Unleashed | |
Bolchini et al. | CADD: a tool for context modeling and data tailoring | |
EP4216052A1 (en) | Method for developing mvvm architecture-based application, and terminal | |
Chondamrongkul | Model-driven framework to support evolution of mobile applications in multi-cloud environments | |
Ma et al. | A Modeling Tool for Sensor-based Mobile Applications | |
Sanchiz et al. | Extending MoWebA for MobileApps with functions in the Cloud | |
Chawla et al. | Scientific Research and Development of Mobile Application for Android Platform |
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 |