CN116700834B - 一种App模块化加载方法及系统 - Google Patents
一种App模块化加载方法及系统 Download PDFInfo
- Publication number
- CN116700834B CN116700834B CN202310980551.8A CN202310980551A CN116700834B CN 116700834 B CN116700834 B CN 116700834B CN 202310980551 A CN202310980551 A CN 202310980551A CN 116700834 B CN116700834 B CN 116700834B
- Authority
- CN
- China
- Prior art keywords
- module
- loading
- registration
- service
- interface
- 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
- 238000011068 loading method Methods 0.000 title claims abstract description 143
- 238000000034 method Methods 0.000 claims abstract description 122
- 230000007246 mechanism Effects 0.000 claims abstract description 43
- 238000004891 communication Methods 0.000 claims abstract description 28
- 230000008569 process Effects 0.000 claims description 48
- 230000003068 static effect Effects 0.000 claims description 32
- 238000012544 monitoring process Methods 0.000 claims description 2
- 238000002955 isolation Methods 0.000 abstract description 9
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 230000008878 coupling Effects 0.000 abstract description 2
- 238000010168 coupling process Methods 0.000 abstract description 2
- 238000005859 coupling reaction Methods 0.000 abstract description 2
- 230000006870 function Effects 0.000 description 17
- 238000011161 development Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 241000590419 Polygonia interrogationis Species 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种App模块化加载方法及系统,包括如下步骤:S1、构建注册服务,注册服务在App编译时将模块接口注册到注册文件;S2、构建加载服务,加载服务在App运行期间,读取注册文件返回的注册信息;S3、加载服务向调用加载服务的被加载模块,发送已经被注册的模块接口;S4、承载被加载模块的模块载体通过反射机制,实例化模块接口的具体实现类,获取模块配置信息;S5、模块载体根据模块配置信息,选用使用动态库加载机制或进程间通信机制加载模块。本发明有益效果:本发明对于App首页(模块载体),只需要进行一次编码,同时使用接口隔离,App首页和其他模块低耦合,代码无侵入性。
Description
技术领域
本发明属于程序设计领域,尤其是涉及一种App模块化加载方法及系统。
背景技术
在app开发中,通常有许多模板化页面的构建,例如App首页,通常是下方几个按钮联动上方页面,在开发的过程中,通常会进行模块化的开发,将首页的不同页面分成独立模块开发,目前使用方案基本是使用Route(路由)的方式去指定跳转或加载,所以当一个页面中包含多个模块需要显示的时候,在对显示有修改的情况下,就需要直接修改原页面的代码逻辑。
发明内容
有鉴于此,本发明旨在提出一种App模块化加载方法及系统,以期解决上述部分技术问题中的至少之一。
为达到上述目的,本发明的技术方案是这样实现的:
本发明第一方面提出了,一种App模块化加载方法,包括如下步骤:
S1、构建注册服务,注册服务在App编译时将模块接口注册到注册文件;
S2、构建加载服务,加载服务在App运行期间,读取注册文件返回的注册信息;
S3、加载服务向调用加载服务的被加载模块,发送已经被注册的模块接口;
S4、承载被加载模块的模块载体通过反射机制,实例化模块接口的具体实现类,获取模块配置信息;
S5、模块载体根据模块配置信息,选用使用动态库加载机制或进程间通信机制加载模块。
进一步的,步骤S1构建注册服务的具体流程如下:
S101、创建一个注册服务类,在注册服务类的内部添加用于存储已注册的模块接口类对象的注册列表;
S102、将模块接口类添加到注册列表中,并创建一个获取注册列表的方法;
S103、创建自定义注解,指定自定义注解在运行时通过反射获取,并指定自定义注解的参数类型;
S104、创建用于调用接口的接口方法,并在接口方法上方,使用自定义注解标识需要注册到注册文件中的模块接口;
S105、创建注解处理器类,并指定注解处理器类对自定义注解标识的模块接口进行处理。
进一步的,步骤S1将模块接口注册到注册文件的过程如下:
在注解处理器类中创建一个process方法,通过Round Environment对象获取被自定义注解标识的模块接口类,在编译过程中,注解处理器扫描自定义注解,根据注册列表将相应的模块接口类,注册到注册服务中。
进一步的,步骤S2的执行步骤如下:
S201、创建服务加载器类,加载注册信息,在服务加载器类中创建一个静态的已注册模块列表,存储已注册的模块接口类对象;
S202、在服务加载器类中添加一个,用于加载注册信息的静态加载方法,使用静态加载方法读取注册文件;
S203、将注册文件中的注册信息解析为模块接口类对象,存储到已注册模块列表中;
S204、在服务加载器类中添加一个用于返回已加载的注册信息的静态返回方法;
S205、在应用程序内调用静态加载方法,加载注册信息,在需要使用注册信息的地方,调用静态返回方法,获取已加载的注册信息。
进一步的,步骤S3的执行步骤如下:
S301、在加载服务中,创建一个回调函数将已注册的模块接口传递给调用方;
S302、在加载服务中,创建一个用于监测模块加载状态的静态监听器;
S303、在加载服务中加载注册信息后,调用静态监听器接口的模块加载方法,并将已注册的注册信息作为参数传递给静态监听器;
S304、在被加载模块中,实现静态监听器接口,重写模块加载方法,接收已注册的注册信息,并进行处理;
S305、在加载服务中,调用静态监听器,将实现静态监听器接口的对象传递给加载服务,加载服务在加载完成后通知被加载模块。
进一步的,步骤S4的执行步骤如下:
S401、在承载被加载模块的模块载体中,使用反射机制获取已注册的模块接口类;
S402、遍历已注册的模块接口列表,在遍历过程中,使用反射实例化每个模块接口的具体实现类;
S403、获取实例化后的模块接口对象后,通过调用相应的方法获取模块的配置信息。
进一步的,步骤S5的执行步骤如下:
S501、模块载体根据模块配置信息判断使用动态库加载机制还是进程间通信机制来加载模块;
S502、若配置信息满足动态库加载的条件,则使用动态库加载机制;若配置信息满足进程间通信的条件,则使用进程间通信机制;
S503、若选择使用动态库加载机制,通过如下步骤加载模块:
a.使用操作系统提供的动态库加载函数加载相应的动态库文件;
b.通过动态库加载函数返回的句柄,使用函数指针或符号表中的符号来调用动态库中的函数或方法;
S504、如果选择使用进程间通信机制,可以通过如下步骤加载模块:
a.启动一个新的进程作为模块载体;
b.在新进程中,使用进程间通信机制与主进程或其他进程进行通信;
c.主进程或其他进程通过进程间通信方式向新进程发送指令,新进程接收指令后加载相应的模块。
本发明第二方面提出了,一种App模块化加载方法的系统,包括注册服务、注册文件、加载服务、模块载体、模块接口五个部分;
注册服务用于提供注册模块接口的功能;注册文件用于保存App编译时注册的模块接口;加载服务用于提供读取模块接口的功能;模块接口用于提供当前模块的配置信息;模块载体负责承载被加载的模块。
进一步的,App处于编译期间,注册服务将注册接口注册至注册文件中;
App处于运行期间,加载服务向注册文件发送加载注册文件请求,注册文件返回相应的注册信息;
模块载体向加载服务发送调用加载服务请求,加载服务返回相应的已注册模块接口,同时模块载体向模块接口发送获取模块配置信息的请求,模块接口返回相应的模块配置信息,模块载体根据模块配置信息加载模块。
相对于现有技术,本发明所述的一种App模块化加载方法及系统具有以下有益效果:
本发明所述的一种App模块化加载方法及系统,对于App首页(模块载体),只需要进行一次编码,同时使用接口隔离,App首页和其他模块低耦合,代码无侵入性。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例所述的一种App模块化加载系统方法示意图;
图2为本发明实施例所述的一种App模块化加载系统结构示意图;
图3为本发明实施例所述的实施例三功能模块结构示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
下面将参考附图并结合实施例来详细说明本发明。
实施例一:
如图1所示:一种App模块化加载方法及系统,包括如下步骤:
S1、构建注册服务,注册服务在App编译时将模块接口注册到注册文件。
步骤S1构建注册服务的具体流程如下:
S101、创建一个注册服务类,在注册服务类的内部添加用于存储已注册的模块接口类对象的注册列表;
S102、将模块接口类添加到注册列表中,并创建一个获取注册列表的方法;
S103、创建自定义注解,指定自定义注解在运行时通过反射获取,并指定自定义注解的参数类型;
S104、创建用于调用接口的接口方法,并在接口方法上方,使用自定义注解标识需要注册到注册文件中的模块接口;
S105、创建注解处理器类,并指定注解处理器类对自定义注解标识的模块接口进行处理。
步骤S1将模块接口注册到注册文件的过程如下:
在注解处理器类中创建一个process方法,通过Round Environment对象获取被自定义注解标识的模块接口类,在编译过程中,注解处理器扫描自定义注解,根据注册列表将相应的模块接口类,注册到注册服务中。
S2、构建加载服务,加载服务在App运行期间,读取注册文件返回的注册信息。
步骤S2的执行步骤如下:
S201、创建服务加载器类,加载注册信息,在服务加载器类中创建一个静态的已注册模块列表,存储已注册的模块接口类对象;
S202、在服务加载器类中添加一个,用于加载注册信息的静态加载方法,使用静态加载方法读取注册文件;
S203、将注册文件中的注册信息解析为模块接口类对象,存储到已注册模块列表中;
S204、在服务加载器类中添加一个用于返回已加载的注册信息的静态返回方法;
S205、在应用程序内调用静态加载方法,加载注册信息,在需要使用注册信息的地方,调用静态返回方法,获取已加载的注册信息。
S3、加载服务向调用加载服务的被加载模块发送,已经被注册的模块接口;
步骤S3的执行步骤如下:
S301、在加载服务中,创建一个回调函数将已注册的模块接口传递给调用方;
定义一个名为`ModuleLoadedListener`的接口,其中包含一个方法`onModulesLoaded(List<Class<?>>registeredModules)`,用于接收已注册的模块接口列表;
在方法签名中,问号‘?‘代表泛型类型参数。泛型是一种Java编程语言的特性,允许在定义类、接口或方法时使用类型参数,以增加代码的通用性和灵活性。
S302、在加载服务中,创建一个静态的`setModuleLoadedListener`方法,用于设置模块加载完毕的监听器;
该方法将接收一个实现了`ModuleLoadedListener`接口的对象作为参数,并保存在加载服务内部。
S303、在加载服务的`loadRegisteredModules`方法中,加载完成注册信息后,调用`ModuleLoadedListener`接口的`onModulesLoaded`方法,并将已注册的模块接口列表作为参数传递给该方法。
S304、在被加载模块中,实现`ModuleLoadedListener`接口,并重写`onModulesLoaded`方法;
在该方法中,接收已注册的模块接口列表,并进行处理。
S305、在加载服务的适当位置,调用`setModuleLoadedListener`方法,将实现了`ModuleLoadedListener`接口的对象传递给加载服务,以便加载服务可以在加载完成后通知被加载模块。
S4、承载被加载模块的模块载体通过反射机制,实例化模块接口的具体实现类,获取模块配置信息;
S401、在承载被加载模块的模块载体中,使用反射机制获取已注册的模块接口类;
调用ServiceLoader.getRegisteredModules()方法获取已加载的模块接口列表,并将其赋值给registeredModules变量。
S402、遍历已注册的模块接口列表,在遍历过程中,使用反射实例化每个模块接口的具体实现类;
使用for循环遍历registeredModules列表中的每一个模块接口类,在循环中,使用反射实例化当前模块接口类的具体实现类,通过调用moduleInterface.newInstance()方法来实现实例化,每个模块接口类都有一个无参的构造方法。
S403、获取实例化后的模块接口对象后,通过调用相应的方法获取模块的配置信息;
判断实例化后的moduleInstance对象是否属于IHomeModule接口的实现类,即通过instanceof运算符判断;
如果是,则将moduleInstance对象强制转换为IHomeModule类型,并赋值给homeModule变量;
调用homeModule.getModuleConfig()方法获取模块配置信息,并将返回的配置信息赋值给config变量。
根据实际需求,对获取到的模块配置信息进行处理,完成相应的功能,继续循环,处理下一个模块接口类,重复步骤S402以及S403,直到遍历完所有的模块接口类。
在步骤S401至步骤S403中需要处理InstantiationException和IllegalAccessException异常,将这两个异常在使用反射实例化模块接口实现类时抛出。
S5、模块载体根据模块配置信息,选用使用动态库加载机制或进程间通信机制加载模块。
步骤S5的执行步骤如下:
S501、模块载体根据模块配置信息判断使用动态库加载机制还是进程间通信机制来加载模块;
综合考虑上述因素,根据模块配置信息中的特定字段或标志位进行判断。如果配置信息中提供了动态库路径,且不需要模块隔离性,可以选择使用动态库加载机制。如果配置信息中指定了需要模块隔离性,或者动态库路径为空,可以选择使用进程间通信机制来加载模块。
S502、若配置信息满足动态库加载的条件,则使用动态库加载机制;若配置信息满足进程间通信的条件,则使用进程间通信机制;
S503、若选择使用动态库加载机制,通过如下步骤加载模块:
a.使用操作系统提供的动态库加载函数加载相应的动态库文件;
b.通过动态库加载函数返回的句柄,使用函数指针或符号表中的符号来调用动态库中的函数或方法;
S504、如果选择使用进程间通信机制,通过如下步骤加载模块:
a.启动一个新的进程作为模块载体;
b.在新进程中,使用进程间通信机制与主进程或其他进程进行通信;
c.主进程或其他进程通过进程间通信方式向新进程发送指令,新进程接收指令后加载相应的模块。
根据模块配置信息来判断使用动态库加载机制还是进程间通信机制来加载模块,需要考虑如下几个方面:
1)配置信息中是否包含了动态库路径:检查配置信息中是否提供了动态库的路径或文件名。如果有,可以使用动态库加载机制来加载模块。
2)是否需要模块隔离性:考虑模块之间的隔离性需求。如果需要保持模块之间的隔离性,可以选择使用进程间通信机制来加载模块,使得每个模块都运行在独立的进程中。
3)是否需要共享模块功能:如果模块需要在多个进程之间共享,并且不存在隔离性要求,可以选择使用动态库加载机制。通过将模块编译为共享库,可以在多个进程中共享使用。
4)系统支持和性能考虑:考虑操作系统对动态库加载和进程间通信的支持情况以及性能因素。动态库加载通常比进程间通信更高效,但一些特定场景下,如需要跨平台或模块之间需要完全隔离时,可能需要选择进程间通信。
实施例二:
如图2所示:一种App模块化加载系统,包括注册服务、注册文件、加载服务、模块载体、模块接口五个部分;注册服务用于提供注册模块接口的功能;注册文件用于保存App编译时注册的模块接口;加载服务用于提供读取模块接口的功能;模块接口用于提供当前模块的配置信息;模块载体负责承载被加载的模块。
App处于编译期间,注册服务将注册接口注册至注册文件中;App处于运行期间,加载服务向注册文件发送加载注册文件请求,注册文件返回相应的注册信息;模块载体向加载服务发送调用加载服务请求,加载服务返回相应的已注册模块接口,同时模块载体向模块接口发送获取模块配置信息的请求,模块接口返回相应的模块配置信息,模块载体根据模块配置信息加载模块。
实施例三:
如图3所示:对类似于App首页这种具有规则的显示,将规则抽取成一个模块接口,例如:App首页,下方按钮的图标,标题,显示的内容和显示的位置(按钮排在第几个),都需要在首页显示的模块实现接口,并按照接口约束的规则进行提供内容,并注册到服务注册文件,首页在显示的时候通过读取注册文件里对应的服务的实现,按照自己定义的规则将这些页面显示出来,后续增加新的模块或减少模块的显示不需要在对首页进行修改,只考虑在对应模块里增加或减少接口的实现。
App模块做为整个应用的壳子,负责将功能模块:平台模块、用户模块、消息模块应用合并到一起,三个功能模块分别引用基础模块,所有的模块接口全部都是定义在基础模块当中,消息模块和用户模块想要在平台模块的首页显示消息和我的页面,需要实现平台模块在基础模块里定义的模块接口,并注册到服务文件中,最终当平台模块加载首页的时候会读取注册服务文件,将消息和我的页面加载出来。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法和系统,可以通过其它的方式实现。例如,以上所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。上述单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种App模块化加载方法,其特征在于:
包括如下步骤:
S1、构建注册服务,注册服务在App编译时将模块接口注册到注册文件;
S2、构建加载服务,加载服务在App运行期间,读取注册文件返回的注册信息;
S3、加载服务向调用加载服务的被加载模块,发送已经被注册的模块接口;
S4、承载被加载模块的模块载体通过反射机制,实例化模块接口的具体实现类,获取模块配置信息;
S5、模块载体根据模块配置信息,选用使用动态库加载机制或进程间通信机制加载模块;
步骤S1构建注册服务的具体流程如下:
S101、创建一个注册服务类,在注册服务类的内部添加用于存储已注册的模块接口类对象的注册列表;
S102、将模块接口类添加到注册列表中,并创建一个获取注册列表的方法;
S103、创建自定义注解,指定自定义注解在运行时通过反射获取,并指定自定义注解的参数类型;
S104、创建用于调用接口的接口方法,并在接口方法上方,使用自定义注解标识需要注册到注册文件中的模块接口;
S105、创建注解处理器类,并指定注解处理器类对自定义注解标识的模块接口进行处理。
2.根据权利要求1所述的一种App模块化加载方法,其特征在于:
步骤S1将模块接口注册到注册文件的过程如下:
在注解处理器类中创建一个process方法,通过Round Environment对象获取被自定义注解标识的模块接口类,在编译过程中,注解处理器扫描自定义注解,根据注册列表将相应的模块接口类,注册到注册服务中。
3.根据权利要求1所述的一种App模块化加载方法,其特征在于:
步骤S2的执行步骤如下:
S201、创建服务加载器类,加载注册信息,在服务加载器类中创建一个静态的已注册模块列表,存储已注册的模块接口类对象;
S202、在服务加载器类中添加一个用于加载注册信息的静态加载方法,使用静态加载方法读取注册文件;
S203、将注册文件中的注册信息解析为模块接口类对象,存储到已注册模块列表中;
S204、在服务加载器类中添加一个用于返回已加载的注册信息的静态返回方法;
S205、在应用程序内调用静态加载方法,加载注册信息,在需要使用注册信息的地方调用静态返回方法,获取已加载的注册信息。
4.根据权利要求1所述的一种App模块化加载方法,其特征在于:
步骤S3的执行步骤如下:
S301、在加载服务中,创建一个回调函数将已注册的模块接口传递给调用方;
S302、在加载服务中,创建一个用于监测模块加载状态的静态监听器;
S303、在加载服务中加载注册信息后,调用静态监听器接口的模块加载方法,并将已注册的注册信息作为参数传递给静态监听器;
S304、在被加载模块中,实现静态监听器接口,重写模块加载方法,接收已注册的注册信息,并进行处理;
S305、在加载服务中,调用静态监听器,将实现静态监听器接口的对象传递给加载服务,加载服务在加载完成后通知被加载模块。
5.根据权利要求1所述的一种App模块化加载方法,其特征在于:
步骤S4的执行步骤如下:
S401、在承载被加载模块的模块载体中,使用反射机制获取已注册的模块接口类;
S402、遍历已注册的模块接口列表,在遍历过程中,使用反射实例化每个模块接口的具体实现类;
S403、获取实例化后的模块接口对象后,通过调用相应的方法获取模块的配置信息。
6.根据权利要求1所述的一种App模块化加载方法,其特征在于:
步骤S5的执行步骤如下:
S501、模块载体根据模块配置信息判断使用动态库加载机制还是进程间通信机制来加载模块;
S502、若配置信息满足动态库加载的条件,则使用动态库加载机制;若配置信息满足进程间通信的条件,则使用进程间通信机制;
S503、若选择使用动态库加载机制,通过如下步骤加载模块:
a.使用操作系统提供的动态库加载函数加载相应的动态库文件;
b.通过动态库加载函数返回的句柄,使用函数指针或符号表中的符号来调用动态库中的函数或方法;
S504、如果选择使用进程间通信机制,通过如下步骤加载模块:
a.启动一个新的进程作为模块载体;
b.在新进程中,使用进程间通信机制与主进程或其他进程进行通信;
c.主进程或其他进程通过进程间通信方式向新进程发送指令,新进程接收指令后加载相应的模块。
7.一种App模块化加载系统,其特征在于:
包括注册服务、注册文件、加载服务、模块载体、模块接口五个部分;
注册服务用于提供注册模块接口的功能;注册文件用于保存App编译时注册的模块接口;加载服务用于提供读取模块接口的功能;模块接口用于提供当前模块的配置信息;模块载体负责承载被加载的模块;
注册服务提供注册模块接口功能的具体流程如下:
S101、创建一个注册服务类,在注册服务类的内部添加用于存储已注册的模块接口类对象的注册列表;
S102、将模块接口类添加到注册列表中,并创建一个获取注册列表的方法;
S103、创建自定义注解,指定自定义注解在运行时通过反射获取,并指定自定义注解的参数类型;
S104、创建用于调用接口的接口方法,并在接口方法上方,使用自定义注解标识需要注册到注册文件中的模块接口;
S105、创建注解处理器类,并指定注解处理器类对自定义注解标识的模块接口进行处理。
8.根据权利要求7所述的一种App模块化加载系统,其特征在于:
App处于编译期间,注册服务将注册接口注册至注册文件中;
App处于运行期间,加载服务向注册文件发送加载注册文件请求,注册文件返回相应的注册信息;
模块载体向加载服务发送调用加载服务请求,加载服务返回相应的已注册模块接口,同时模块载体向模块接口发送获取模块配置信息的请求,模块接口返回相应的模块配置信息,模块载体根据模块配置信息加载模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310980551.8A CN116700834B (zh) | 2023-08-07 | 2023-08-07 | 一种App模块化加载方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310980551.8A CN116700834B (zh) | 2023-08-07 | 2023-08-07 | 一种App模块化加载方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116700834A CN116700834A (zh) | 2023-09-05 |
CN116700834B true CN116700834B (zh) | 2023-10-24 |
Family
ID=87831503
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310980551.8A Active CN116700834B (zh) | 2023-08-07 | 2023-08-07 | 一种App模块化加载方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116700834B (zh) |
Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9915173D0 (en) * | 1998-06-30 | 1999-09-01 | Sun Microsystems Inc | System and method for facilitating the transfer of information between programs processed in a digital computer system |
CN101847100A (zh) * | 2010-06-08 | 2010-09-29 | 用友软件股份有限公司 | 扩展软件应用的方法和装置 |
JP2011096193A (ja) * | 2009-11-02 | 2011-05-12 | Sumitomo Electric Ind Ltd | 情報処理装置、情報処理システム、情報処理方法、及びコンピュータプログラム |
CN102214109A (zh) * | 2010-04-08 | 2011-10-12 | 深圳市金蝶中间件有限公司 | 一种加载插件的方法及装置 |
CN103544016A (zh) * | 2013-10-28 | 2014-01-29 | 珠海许继芝电网自动化有限公司 | 一种基于java反射技术的服务注册配置方法及系统 |
CN107273151A (zh) * | 2017-05-25 | 2017-10-20 | 西安理工大学 | 一种安全的Android App功能插件化方法 |
CN110413259A (zh) * | 2018-04-28 | 2019-11-05 | 中兴通讯股份有限公司 | Android服务框架、实现扩展服务的方法及装置 |
CN112035122A (zh) * | 2019-06-04 | 2020-12-04 | 中移(苏州)软件技术有限公司 | 一种接口部署方法、系统及存储介质 |
CN112269638A (zh) * | 2020-10-29 | 2021-01-26 | 苏州浪潮智能科技有限公司 | 一种实现服务器应用之间交互的虚拟机类装载装置、方法及系统 |
CN112988279A (zh) * | 2021-04-16 | 2021-06-18 | 广州南方卫星导航仪器有限公司 | 一种对象处理方法、装置、电子设备及存储介质 |
CN113419783A (zh) * | 2021-04-27 | 2021-09-21 | 中国电子科技集团公司第十四研究所 | 一种跨平台多进程的插件管理与过程调用方法 |
CN113791979A (zh) * | 2021-09-16 | 2021-12-14 | 平安国际智慧城市科技股份有限公司 | 软件产品的动态调试方法、装置、计算机设备及存储介质 |
CN114035772A (zh) * | 2021-12-13 | 2022-02-11 | 中国人民解放军96901部队25分队 | 一种系统级软件界面插件自动化集成系统 |
CN114647518A (zh) * | 2020-12-21 | 2022-06-21 | 腾讯科技(深圳)有限公司 | 微前端系统、子应用加载方法及计算机可读存储介质 |
CN115756899A (zh) * | 2022-11-30 | 2023-03-07 | 山东新一代信息产业技术研究院有限公司 | 一种支持IROS自定义消息类型的irosBridge实现方法 |
CN116149762A (zh) * | 2022-12-30 | 2023-05-23 | 中国联合网络通信集团有限公司 | 一种函数框架系统、函数运行方法及装置 |
-
2023
- 2023-08-07 CN CN202310980551.8A patent/CN116700834B/zh active Active
Patent Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9915173D0 (en) * | 1998-06-30 | 1999-09-01 | Sun Microsystems Inc | System and method for facilitating the transfer of information between programs processed in a digital computer system |
JP2011096193A (ja) * | 2009-11-02 | 2011-05-12 | Sumitomo Electric Ind Ltd | 情報処理装置、情報処理システム、情報処理方法、及びコンピュータプログラム |
CN102214109A (zh) * | 2010-04-08 | 2011-10-12 | 深圳市金蝶中间件有限公司 | 一种加载插件的方法及装置 |
CN101847100A (zh) * | 2010-06-08 | 2010-09-29 | 用友软件股份有限公司 | 扩展软件应用的方法和装置 |
CN103544016A (zh) * | 2013-10-28 | 2014-01-29 | 珠海许继芝电网自动化有限公司 | 一种基于java反射技术的服务注册配置方法及系统 |
CN107273151A (zh) * | 2017-05-25 | 2017-10-20 | 西安理工大学 | 一种安全的Android App功能插件化方法 |
CN110413259A (zh) * | 2018-04-28 | 2019-11-05 | 中兴通讯股份有限公司 | Android服务框架、实现扩展服务的方法及装置 |
CN112035122A (zh) * | 2019-06-04 | 2020-12-04 | 中移(苏州)软件技术有限公司 | 一种接口部署方法、系统及存储介质 |
CN112269638A (zh) * | 2020-10-29 | 2021-01-26 | 苏州浪潮智能科技有限公司 | 一种实现服务器应用之间交互的虚拟机类装载装置、方法及系统 |
CN114647518A (zh) * | 2020-12-21 | 2022-06-21 | 腾讯科技(深圳)有限公司 | 微前端系统、子应用加载方法及计算机可读存储介质 |
CN112988279A (zh) * | 2021-04-16 | 2021-06-18 | 广州南方卫星导航仪器有限公司 | 一种对象处理方法、装置、电子设备及存储介质 |
CN113419783A (zh) * | 2021-04-27 | 2021-09-21 | 中国电子科技集团公司第十四研究所 | 一种跨平台多进程的插件管理与过程调用方法 |
CN113791979A (zh) * | 2021-09-16 | 2021-12-14 | 平安国际智慧城市科技股份有限公司 | 软件产品的动态调试方法、装置、计算机设备及存储介质 |
CN114035772A (zh) * | 2021-12-13 | 2022-02-11 | 中国人民解放军96901部队25分队 | 一种系统级软件界面插件自动化集成系统 |
CN115756899A (zh) * | 2022-11-30 | 2023-03-07 | 山东新一代信息产业技术研究院有限公司 | 一种支持IROS自定义消息类型的irosBridge实现方法 |
CN116149762A (zh) * | 2022-12-30 | 2023-05-23 | 中国联合网络通信集团有限公司 | 一种函数框架系统、函数运行方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116700834A (zh) | 2023-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7111302B2 (en) | System and method for formatting data for transmission between an embedded computer and a host computer having different machine characteristics | |
US7681138B2 (en) | Use of a reusable control software whose user interface and communication connection are established via an external description-based configuration at run time | |
US5832219A (en) | Distributed object networking service | |
US8307379B2 (en) | Determining an extension to use to process an input object to a call in a program | |
US20080072240A1 (en) | Change notification agent | |
US7739660B2 (en) | Code management in a distributed software development environment | |
CN116700834B (zh) | 一种App模块化加载方法及系统 | |
EP1574980A1 (en) | Context objects for accessing message content | |
CN116233217B (zh) | 基于路由的页面跳转方法、装置、电子设备及存储介质 | |
US7234147B1 (en) | Method and apparatus for supporting data communication between program components | |
US11520597B2 (en) | Operating system architecture for microkernel generations support | |
CN106897057A (zh) | 插件调用通知栏的方法及装置 | |
AU2002247399B2 (en) | Development and testing system and method | |
CN118819493A (zh) | 基于Spring的扩展信息集成处理方法、装置和请求处理方法 | |
CN118377580A (zh) | 一种异构加速设备管理调度方法、装置、设备和存储介质 | |
CN115840573A (zh) | 插件式软件和实现方法、计算机设备和可读存储介质 | |
CN117806662A (zh) | 一种应用部署方法、装置、设备及介质 | |
CN115544495A (zh) | 跨容器确权方法、装置、设备及计算机可读存储介质 | |
CN117435262A (zh) | 组件动态加载方法、装置、电子设备及存储介质 | |
CN117667083A (zh) | 一种页面的生成方法、系统及终端设备 | |
Popp | Consideration regarding a Workcell and Resource Model implementation in FMS |
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 |