程序执行方法、装置、电子设备及存储介质与流程

未命名 10-08 阅读:79 评论:0


1.本发明涉及计算机技术领域,尤其涉及一种程序执行方法、装置、电子设备及存储介质。


背景技术:

2.目前,开发人员针对各种开发任务,可以借助外部提供的一些工具包(如依赖包)来满足其开发任务的基础业务需求。其中,依赖包可以理解为:从外部得到的,可以依赖于其所提供的功能的工具包。
3.然而,依赖包内部的程序执行流程对于开发人员来说是黑盒,开发人员不清楚也无法更改依赖包中的程序执行流程,使得依赖包提供的程序无法满足开发人员在某些场景下,需要更改依赖包中程序执行流程的需求。


技术实现要素:

4.本发明实施例提供一种程序执行方法、装置、电子设备及存储介质,以更改依赖包中的程序执行流程。
5.本发明实施例第一方面提供了一种程序执行方法,所述方法包括:
6.在程序的执行过程中,响应于监听到对可扩展函数的读操作,确定是否存在所述可扩展函数的执行参数;其中,所述可扩展函数为所述程序对外暴露的函数,所述执行参数至少包括:执行参数值、待插入函数标识;
7.响应于存在所述可扩展函数的执行参数,根据所述待插入函数标识,确定待插入函数以及所述待插入函数与所述可扩展函数之间的执行顺序;
8.根据所述执行参数值、所述可扩展函数、所述待插入函数以及所述执行顺序,更改所述程序的执行流程。
9.可选的,在所述执行顺序为所述待插入函数在所述可扩展函数之前执行的情况下,所述根据所述执行参数值、所述可扩展函数、所述待插入函数以及所述执行顺序,更改所述程序的执行流程,包括:
10.将所述执行参数值传入所述待插入函数中进行执行,得到所述待插入函数的第一执行结果;
11.将所述待插入函数的第一执行结果传入所述可扩展函数中进行执行。
12.可选的,在所述执行顺序为所述待插入函数在所述可扩展函数之后执行的情况下,所述根据所述执行参数值、所述可扩展函数、所述待插入函数以及所述执行顺序,更改所述程序的执行流程,包括:
13.将所述执行参数值传入所述可扩展函数中进行执行,得到所述可扩展函数的第一执行结果;
14.将所述可扩展函数的第一执行结果传入所述待插入函数中进行执行。
15.可选的,所述待插入函数包括第一待插入函数和第二待插入函数,在所述执行顺
序为第一待插入函数、所述可扩展函数、所述第二待插入函数顺次执行的情况下,
16.所述根据所述执行参数值、所述可扩展函数、所述待插入函数以及所述执行顺序,更改所述程序的执行流程,包括:
17.将所述执行参数值传入所述第一待插入函数中进行执行,得到所述第一待插入函数的执行结果;
18.将所述第一待插入函数的执行结果传入所述可扩展函数中进行执行,得到所述可扩展函数的第二执行结果;
19.将所述可扩展函数的第二执行结果传入所述第二待插入函数中进行执行。
20.可选的,所述方法还包括:
21.响应于所述待插入函数的第一执行结果为报错信息,终止所述程序的执行。
22.可选的,所述方法还包括:
23.向外暴露所述程序中的可扩展函数;
24.接收所述可扩展函数的传入参数,所述传入参数至少包括:所述可扩展函数对应的待插入函数、所述待插入函数标识;
25.将所述可扩展函数对应的待插入函数以及所述待插入函数标识进行关联存储;
26.生成所述可扩展函数的执行参数。
27.本发明实施例第二方面提供了一种程序执行装置,所述装置包括:
28.监听模块,用于在程序的执行过程中,响应于监听到对可扩展函数的读操作,确定是否存在所述可扩展函数的执行参数;其中,所述可扩展函数为所述程序对外暴露的函数,所述执行参数至少包括:执行参数值、待插入函数标识;
29.确定模块,用于响应于存在所述可扩展函数的执行参数,根据所述待插入函数标识,确定待插入函数以及所述待插入函数与所述可扩展函数之间的执行顺序;
30.执行更改模块,用于根据所述执行参数值、所述可扩展函数、所述待插入函数以及所述执行顺序,更改所述程序的执行流程。
31.可选的,在所述执行顺序为所述待插入函数在所述可扩展函数之前执行的情况下,所述执行更改模块,包括:
32.第一执行子模块,用于将所述执行参数值传入所述待插入函数中进行执行,得到所述待插入函数的第一执行结果;
33.第二执行子模块,用于将所述待插入函数的第一执行结果传入所述可扩展函数中进行执行。
34.可选的,在所述执行顺序为所述待插入函数在所述可扩展函数之后执行的情况下,所述执行更改模块,包括:
35.第三执行子模块,用于将所述执行参数值传入所述可扩展函数中进行执行,得到所述可扩展函数的第一执行结果;
36.第四执行子模块,用于将所述可扩展函数的第一执行结果传入所述待插入函数中进行执行。
37.可选的,所述待插入函数包括第一待插入函数和第二待插入函数,在所述执行顺序为第一待插入函数、所述可扩展函数、所述第二待插入函数顺次执行的情况下,
38.所述执行更改模块,包括:
39.第五执行子模块,用于将所述执行参数值传入所述第一待插入函数中进行执行,得到所述第一待插入函数的执行结果;
40.第六执行子模块,用于将所述第一待插入函数的执行结果传入所述可扩展函数中进行执行,得到所述可扩展函数的第二执行结果;
41.第七执行子模块,用于将所述可扩展函数的第二执行结果传入所述第二待插入函数中进行执行。
42.可选的,所述装置还包括:
43.执行终止模块,用于响应于所述待插入函数的第一执行结果为报错信息,终止所述程序的执行。
44.可选的,所述装置还包括:
45.函数暴露模块,用于向外暴露所述程序中的可扩展函数;
46.参数接收模块,用于接收所述可扩展函数的传入参数,所述传入参数至少包括:所述可扩展函数对应的待插入函数、所述待插入函数标识;
47.关联存储模块,用于将所述可扩展函数对应的待插入函数以及所述待插入函数标识进行关联存储;
48.参数生成模块,用于生成所述可扩展函数的执行参数。
49.本发明实施例第三方面提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明第一方面所述的程序执行方法中的步骤。
50.本发明实施例第四方面提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行时实现本发明第一方面所述的程序执行方法的步骤。
51.采用本发明实施例提供的程序执行方法,在依赖包程序的执行过程中,响应于监听到对可扩展函数的读操作,确定是否存在该可扩展函数的执行参数;响应于存在可扩展函数的执行参数,根据执行参数中的待插入函数标识,确定待插入函数以及待插入函数与可扩展函数之间的执行顺序;根据执行参数中的执行参数值、可扩展函数、待插入函数以及执行顺序,更改依赖包中程序的执行流程,以在依赖包的使用过程中,可以根据实际需求实现对依赖包中程序执行流程的更改,从而很大程度上解放了依赖包的限制,使得依赖包可以更加灵活地适应各种场景需求。
附图说明
52.为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
53.图1是本发明一实施例示出的一种程序执行方法的流程图;
54.图2是本发明一实施例提供的一种基类baseclass属性示意图;
55.图3是本发明一实施例提供的程序执行装置的结构框图;
56.图4是本发明一实施例示出的一种电子设备的示意图。
具体实施方式
57.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
58.参考图1,图1是本发明一实施例示出的一种程序执行方法的流程图。
59.如图1所示,本实施例提供的程序执行方法可以包括以下步骤:
60.步骤s11:在程序的执行过程中,响应于监听到对可扩展函数的读操作,确定是否存在所述可扩展函数的执行参数。
61.本实施例中,在依赖包中程序的执行过程中,可以实时监听程序中可扩展函数的读操作,例如可以通过defineproperty方法来监听可扩展函数的读操作。其中,本实施例的依赖包可以是基于类的继承所实现,例如在开发依赖包时,可以基于ecmascript 6中提供的类class,创造一个基类baseclass继承于eventemitter,然后针对这个基类来开发依赖包的各种功能,使得开发依赖包功能时都继承自这个基类baseclass。如此,本实施例中依赖包中的程序可以是基于类的继承所实现的。
62.本实施例依赖包中的程序对外暴露有可扩展函数,也就是说,可扩展函数为程序对外暴露的函数或方法,也可以理解为:可扩展函数为依赖包中对外暴露出去的函数或方法,以使得使用依赖包的技术人员可以根据实际需求对依赖包中暴露出的可扩展函数进行相应的扩展。
63.本实施例中,依赖包中对外暴露的可扩展函数可以有多个,因此在程序的执行过程中,可以对每个可扩展函数的读操作进行监听,并在监听到可扩展函数的读操作的情况下,响应于监听到对可扩展函数的读操作,确定是否存在该被监听到读操作的可扩展函数的执行参数。其中,可扩展函数的执行参数可以至少包括:执行参数值、待插入函数标识;执行参数值为在可扩展函数执行阶段需要带入执行值的参数值;待插入函数标识为待插入函数的函数标识,待插入函数为用户自定义的在可扩展函数之前或之后执行的函数。
64.可以理解的是,若用户针对当前被监听到读操作的可扩展函数设置有自定义的待插入函数,则可以确定出存在可扩展函数的执行参数;若用户针对当前被监听到读操作的可扩展函数未设置有自定义的待插入函数,则可以确定出不存在可扩展函数的执行参数。此外在一实施例中,执行参数还可以包括:当前执行环境上下文、可扩展函数标识。其中,执行参数中包括有可扩展函数标识,即可将执行参数与可扩展函数关联起来,从而可以根据被监听到读操作的可扩展函数的可扩展函数标识,确定是否存在该可扩展函数的执行参数。
65.步骤s12:响应于存在所述可扩展函数的执行参数,根据所述待插入函数标识,确定待插入函数以及所述待插入函数与所述可扩展函数之间的执行顺序。
66.本实施例中,在确定出存在被监听到读操作的可扩展函数的执行参数的情况下,即在确定出用户针对当前被监听到读操作的可扩展函数设置有自定义的待插入函数的情况下,可以响应于存在该可扩展函数的执行参数,读取该可扩展函数的执行参数,并根据执行参数中的待插入函数标识,确定出与待插入函数标识对应的待插入函数,以及,根据待插入标识,确定出待插入函数与可扩展函数之间的执行顺序。
67.步骤s13:根据所述执行参数值、所述可扩展函数、所述待插入函数以及所述执行顺序,更改所述程序的执行流程。
68.本实施例中,在监听到当前可扩展函数的读操作、获取到该可扩展函数对应的执行参数值、该可扩展函数对应的待插入函数,以及,待插入函数与可扩展函数之间的执行顺序之后,可以根据执行参数值、可扩展函数、待插入函数以及执行顺序,更改程序的执行流程。具体的,可以理解为是根据执行参数值、可扩展函数、待插入函数以及执行顺序,更改该可扩展函数在当前依赖包中程序的执行流程,从而实现程序执行流程的更改。
69.在本实施例中,针对基于类的继承所实现的依赖包,均可通过向外暴露可扩展函数,使得开发人员可以根据实际需求针对可扩展函数自定义待插入函数。从而在程序的执行过程中,对可扩展函数的读操作进行监听,在监听到后确定是否存在该可扩展函数的执行参数,响应于存在执行参数,即可根据执行参数中的待插入函数标识确定待插入函数以及执行顺序,再根据执行参数中的执行参数值、可扩展函数、待插入函数和执行顺序,对依赖包中的程序执行流程进行更改,从而实现了开发人员对依赖包的无侵入式修改,使得开发人员能够很大程度上解放依赖包的限制,更加灵活地适应各种场景需求。此外,本实施例对于基于类class实现的依赖包有普遍适用性,也无语言限制,任何面向对象编程的语言,只要是实现了类的继承,基于类实现的依赖包均可通过本实施例的方案实现依赖包的无侵入式修改,提升了方法的灵活性和适用性。
70.结合以上实施例,在一实施方式中,本发明实施例还提供了一种程序执行方法。在该方法中,在所述执行顺序为所述待插入函数在所述可扩展函数之前执行的情况下,上述步骤s13具体可以包括步骤s21和步骤s22:
71.步骤s21:将所述执行参数值传入所述待插入函数中进行执行,得到所述待插入函数的第一执行结果。
72.本实施例中,在根据待插入函数标识确定出待插入函数与可扩展函数之间的执行顺序为待插入函数在可扩展函数之前执行的情况下,可以是将获取到的执行参数值传入至待插入函数作为参数进行执行,得到待插入函数的第一执行结果,其中,待插入函数可以是开发人员自定义的代码片段,待插入函数的第一执行结果为待插入函数在可扩展函数之前执行时,待插入函数根据执行参数值所得到的执行结果。
73.步骤s22:将所述待插入函数的第一执行结果传入所述可扩展函数中进行执行。
74.本实施例中,在得到待插入函数的第一执行结果后,可以将待插入函数的第一执行结果作为可扩展函数的参数,传入至可扩展函数中进行执行(执行依赖包中正常的代码),得到本次可扩展函数的执行结果,从而实现在依赖包中的可扩展函数之前插入自定义的代码片段,实现依赖包无侵入式的修改,进一步实现依赖包中程序执行流程的更改。
75.在本实施例中,在通过待插入函数标识确定出待插入函数在可扩展函数之前执行的情况下,可以将执行参数值先传入待插入函数作为待插入函数的参数进行自定义插入代码的执行,再将执行的结果传入至可扩展函数作为可扩展函数的参数进行依赖包正常代码的执行,从而实现依赖包无侵入式的修改,更改依赖包中程序的执行流程。
76.结合以上实施例,在一实施方式中,本发明实施例还提供了一种程序执行方法。在该方法中,在所述执行顺序为所述待插入函数在所述可扩展函数之后执行的情况下,上述步骤s13具体可以包括步骤s31和步骤s32:
77.步骤s31:将所述执行参数值传入所述可扩展函数中进行执行,得到所述可扩展函数的第一执行结果。
78.本实施例中,在根据待插入函数标识确定出待插入函数与可扩展函数之间的执行顺序为待插入函数在可扩展函数之后执行的情况下,可以是将获取到的执行参数值传入至可扩展函数作为参数进行执行,得到可扩展函数的第一执行结果,其中,可扩展函数的第一执行结果为待插入函数在可扩展函数之后执行时,可扩展函数根据执行参数值所得到的执行结果。
79.步骤s32:将所述可扩展函数的第一执行结果传入所述待插入函数中进行执行。
80.本实施例中,在得到可扩展函数的第一执行结果后,可以将可扩展函数的第一执行结果作为待插入函数的参数,传入至待插入函数中进行执行(执行依赖包中插入的自定义代码),得到本次待插入函数的执行结果,从而实现在依赖包中的可扩展函数之后插入自定义的代码片段,实现依赖包无侵入式的修改,进一步实现依赖包中程序执行流程的更改。
81.在本实施例中,在通过待插入函数标识确定出待插入函数在可扩展函数之后执行的情况下,可以将执行参数值先传入可扩展函数作为可扩展函数的参数进行依赖包正常代码的执行,再将执行的结果传入至待插入函数作为待插入函数的参数进行自定义插入代码的执行,从而实现依赖包无侵入式的修改,更改依赖包中程序的执行流程。
82.结合以上实施例,在一实施方式中,本发明实施例还提供了一种程序执行方法。在该方法中,所述待插入函数包括第一待插入函数和第二待插入函数,在所述执行顺序为第一待插入函数、所述可扩展函数、所述第二待插入函数顺次执行的情况下,上述步骤s13具体可以包括步骤s41至步骤s43:
83.步骤s41:将所述执行参数值传入所述第一待插入函数中进行执行,得到所述第一待插入函数的执行结果。
84.本实施例中,用户可以根据实际需求针对可扩展函数自定义多个待插入函数,此时,该可扩展函数的执行参数中的待插入函数标识可以有多个,从而可以根据多个待插入函数标识分别确定出多个待插入函数及对应的执行顺序。其中,多个待插入函数可以包括:第一待插入函数和第二待插入函数;第一待插入函数为多个待插入函数中先于可扩展函数执行的待插入函数,第二待插入函数为多个待插入函数中后于可扩展函数执行的待插入函数,该多个待插入函数与可扩展函数之间的执行顺序为:第一待插入函数、可扩展函数、第二待插入函数顺次执行。
85.因此,在根据待插入函数标识确定出待插入函数与可扩展函数之间的执行顺序为:第一待插入函数、可扩展函数、第二待插入函数顺次执行的情况下,可以是将获取到的执行参数值传入至第一待插入函数作为参数进行执行,得到第一待插入函数的执行结果,其中,第一待插入函数的执行结果为第一待插入函数根据执行参数值所得到的执行结果。
86.步骤s42:将所述第一待插入函数的执行结果传入所述可扩展函数中进行执行,得到所述可扩展函数的第二执行结果。
87.本实施例中,在得到第一待插入函数的执行结果后,可以将第一待插入函数的执行结果作为可扩展函数的参数,传入至可扩展函数中进行执行(执行依赖包中正常的代码),得到可扩展函数的第二执行结果,其中,可扩展函数的第二执行结果为可扩展函数的前后均有待插入函数执行时,可扩展函数根据第一待插入函数的执行结果进行执行后,所
得到的执行结果。
88.步骤s43:将所述可扩展函数的第二执行结果传入所述第二待插入函数中进行执行。
89.本实施例中,在得到可扩展函数的第二执行结果后,可以将可扩展函数的第二执行结果作为第二待插入函数的参数,传入至第二待插入函数中进行执行(执行依赖包中插入的自定义代码),得到第二待插入函数的执行结果,从而实现在依赖包中的可扩展函数的前后均插入自定义的代码片段,实现依赖包无侵入式的修改,进一步实现依赖包中程序执行流程的更改。
90.在本实施例中,在存在多个待插入函数,且通过待插入函数标识确定多个待插入函数与可扩展函数之间的执行顺序为:第一待插入函数、可扩展函数、第二待插入函数顺次执行的情况下,可以先将执行参数值传入第一待插入函数作为第一待插入函数的参数进行自定义插入代码的执行,再将执行的结果传入至可扩展函数作为可扩展函数的参数进行依赖包正常代码的执行,最后将执行的结果传入至第二待插入函数作为第二待插入函数的参数进行自定义插入代码的执行,从而开发人员自定义的代码片段就会在依赖包程序执行的时候被正确插入到相应位置,完成预定的功能,实现依赖包无侵入式更改,更改依赖包中程序的执行流程。
91.结合以上任一实施例,在一实施方式中,本发明实施例还提供了一种程序执行方法。在该方法中,除上述步骤之外,还可以包括步骤s51:
92.步骤s51:响应于所述待插入函数的第一执行结果为报错信息,终止所述程序的执行。
93.本实施例中,若使用依赖包的开发人员想要在依赖包执行到可扩展函数前终止程序执行,则可以自定义在可扩展函数之前执行的、可以抛出报错信息的待插入函数。从而在监听到可扩展函数的读操作,确定该可扩展函数存在对应的执行参数,且确定待插入函数在可扩展函数之前执行的情况下,将获取到的执行参数值传入至待插入函数作为参数进行执行,得到待插入函数的第一执行结果,且确定待插入函数的第一执行结果为报错信息,如抛出错误error,此时可以响应于待插入函数的第一执行结果为报错信息,终止依赖包中程序的执行,从而实现阻断程序执行。
94.在本实施例中,可以通过在可扩展函数之前执行能够抛出报错信息的待插入函数,从而实现终止依赖包中程序的执行,使得依赖包的程序可以满足截止程序执行的业务需求。
95.在另一可选实施方式中,若使用依赖包的开发人员想要在依赖包执行完可扩展函数后终止程序执行,则可以自定义在可扩展函数之后执行的、可以抛出报错信息的待插入函数。从而在监听到可扩展函数的读操作,确定该可扩展函数存在对应的执行参数,且确定待插入函数在可扩展函数之后执行的情况下,将获取到的执行参数值传入至可扩展函数作为参数进行执行,得到可扩展函数的第一执行结果,再将可扩展函数的第一执行结果传入至待插入函数作为参数进行执行,得到本次待插入函数的执行结果,且确定本次待插入函数的执行结果为报错信息,如抛出错误error,此时可以响应于本次待插入函数的执行结果为报错信息,终止依赖包中程序的执行,从而实现阻断程序执行。从而通过在可扩展函数之后执行能够抛出报错信息的待插入函数,从而实现终止依赖包中程序的执行,使得依赖包
的程序可以满足截止程序执行的业务需求。
96.结合以上任一实施例,在一实施方式中,本发明实施例还提供了一种程序执行方法。在该方法中,除上述步骤之外,还可以包括步骤s61至s64:
97.步骤s61:向外暴露所述程序中的可扩展函数。
98.本实施例提供的程序执行方法可以应用于插件,该插件与依赖包一样,均可以是基于类的继承所实现。例如在开发依赖包时,可以基于ecmascript6中提供的类class,创造一个基类baseclass继承于eventemitter,然后针对这个基类baseclass实现一套插件机制,开发插件的各功能时都继承自这个基类baseclass,即可通过该插件实现对依赖包代码的插入,实现对代码流程的修改等等。
99.如图2所示,图2是本发明一实施例提供的一种基类baseclass属性示意图。例如,用于执行上述方法的插件可以实现如图2中baseclass所展示的属性和方法。其中,插件可以至少包括以下部分:对外暴露单元、代码定义单元、存储单元、执行单元,这些部分也都是基于类的继承所实现。
100.本实施例中,可以是通过插件的对外暴露单元向外暴露依赖包的程序中的可扩展函数。例如可以是在开发依赖包的过程中,确定能够暴露出去的函数或方法,通过对外暴露单元向外暴露确定出的可扩展函数,而使用依赖包的开发人员可以通过依赖包的相关日志中确定可扩展函数。
101.具体的,可以通过methods来定义可扩展函数,methods即是要扩展或者要暴露出去的方法,它是定义在类上的方法,即基于基类去创建实现类的时候,可以暴露出去进行扩展的定义在类上的方法。
102.步骤s62:接收所述可扩展函数的传入参数,所述传入参数至少包括:所述可扩展函数对应的待插入函数、所述待插入函数标识。
103.使用依赖包的开发人员可以针对暴露出的可扩展函数进行扩展,自定义扩展出该可扩展函数对应的待插入函数。本实施例可以向外面暴露useplugin方法,使得开发人员能够在开发过程中使用useplugin方法通过参数将自定义的待插入函数传入,如此,插件可以通过代码定义单元接收该可扩展函数的传入参数。也就是说,本实施例的代码定义单元用于收集开发人员自定义的要插入程序流程的代码。其中,可扩展函数的传入参数为通过useplugin方法传入的与可扩展函数相关的参数,该传入参数至少包括:该可扩展函数对应的待插入函数、待插入函数标识。
104.示例的,用户可以对methods中定义的方法进行拓展,拓展出相应method方法的beforemethod和/或aftermethod方法,然后这两个方法分别在依赖包内部method方法执行之前或执行之后执行,且这两种方法的具体内容可以由开发人员来确定。具体的,可以是开发人员在开发过程中使用useplugin通过参数将自定义的before代码片段或者after代码片段传入,使得插件可以通过代码定义单元在实现useplugin的过程中将传入的待插入函数标识(即函数名称)和可扩展函数对应的待插入函数(函数名称对应的值,即自定义的代码片段)收集起来。示例的,待插入函数标识可以是:before[methodname]和/或after[methodname],其中,methodname为可扩展函数标识。
[0105]
步骤s63:将所述可扩展函数对应的待插入函数以及所述待插入函数标识进行关联存储。
[0106]
本实施例在接收到可扩展函数的传入参数之后,可以通过插件的存储单价将传入参数中的可扩展函数对应的待插入函数和待插入函数标识进行关联存储起来。例如可以是将待插入函数标识before[methodname]对应一个映射值(即before[methodname]对应的待插入函数),将待插入函数标识after[methodname]对应一个映射值(即after[methodname]对应的待插入函数),以得到映射集合,从而将映射集合存入数据单元的pluginoptionslist中,实现可扩展函数对应的待插入函数及待插入函数标识的关联存储,以使得在确定存在可扩展函数的执行参数,确定出执行参数中的待插入函数标识后,可以根据待插入函数标识确定出与其关联存储的待插入函数,例如可以根据before[methodname]去pluginoptionslist中寻找对应的建值,从而得到对应的可扩展函数的待插入函数。
[0107]
步骤s64:生成所述可扩展函数的执行参数。
[0108]
本实施例中,插件通过代码定义单元接收到可扩展函数的传入参数,通过存储单元将可扩展函数对应的待插入函数以及待插入函数标识进行关联存储之后,即可通过执行单元生成该可扩展函数的执行参数,该执行参数至少包括执行参数值、待插入函数标识。从而在程序的执行过程中,响应于监听到对可扩展函数的读操作,能够确定是否存在该扩展函数的执行参数,以确定是否执行程序流程的相应更改。
[0109]
其中,插件中的执行单元用于执行依赖包中插入代码的操作,以及插入代码后如何执行整个依赖包程序执行流程的操作。
[0110]
示例的,插件中的doaction部分(即执行单元)可以基于传入的可扩展函数对应的待插入函数以及待插入函数标识,生成可扩展函数的执行参数,该执行参数至少可以包括:当前执行环境上下文、执行参数值、可扩展函数标识、待插入函数标识(如before[methodname]和/或after[methodname])等等。然后可以通过defineproperty方法去监听可扩展函数的读操作,在监听到可扩展函数的读操作的情况下,确定该可扩展函数是否存在对应的执行参数,在确定存在可扩展函数的执行参数的情况下,可以根据执行参数中待插入函数标识(例如before[methodname])去pluginoptionslist中寻找对应的键值(待插入函数),以及确定出执行顺序,例如可以根据before[methodname]确定出其所对应的待插入函数在可扩展函数之前执行。
[0111]
然后,将执行参数值传入before[methodname]对应的待插入函数(开发人员自定义的代码片段)中,如果开发人员的代码片段抛出错误error,此时可以捕获到错误error然后终止程序执行。否则,将待插入函数的返回值作为可扩展函数的参数(即依赖包中正常定义的函数参数),执行依赖包正常的代码,然后得到可扩展函数的返回值,在存在after[methodname]的情况下,可以获取到after[methodname]对应的待插入函数,然后将可扩展函数的返回值传给after[methodname]对应的待插入函数作为参数执行开发人员自定义的代码片段,从而实现依赖包中程序执行流程的更改,实现了依赖包无侵入式的修改。
[0112]
通过本实施例提供的程序执行方法,开发人员自定义的代码片段可以在依赖包程序执行的时候被正确插入到相应位置,完成预定的功能,实现无侵入式更改或阻断程序执行,本方法支持开发人员自定义,使用简单方便,只需要使用上述方法定义编程自己的代码片段即可。通过本实施例的插件机制,可以提供开发人员对依赖包无侵入式的修改,对于基于类class实现的依赖包有普遍适用性;且无语言限制,任何语言只要是实现了类的继承,
都可使用该插件机制;依赖此机制,开发人员能够很大程度上解放依赖包的限制,从而灵活的适应各种场景需求。
[0113]
如此,在应用场景方面,本实施例向外部提供了一种能够更改依赖包的程序执行流程的插件机制。例如现在有一个项目,在开发人员把该项目做出来之后,可以对外部提供这个项目以及提供实现更改该项目程序执行流程的插件功能机制。当其他人使用这个项目(即依赖包)时,可以根据自己的实际需求通过本方法来修改这个项目的程序执行流程,而这个开发的项目就是整个基于类来实现的程序执行流程。如在开发时将可扩展方法暴露出去,当使用者想在某个程序执行节点前后做一些事情,则可以通过本方案在这个程序执行节点去插入自定义代码来实现需求。
[0114]
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
[0115]
基于同一发明构思,本发明一实施例提供了一种程序执行装置300,该装置300。参考图3,图3是本发明一实施例提供的程序执行装置的结构框图。如图3所示,该装置300包括:
[0116]
监听模块301,用于在程序的执行过程中,响应于监听到对可扩展函数的读操作,确定是否存在所述可扩展函数的执行参数;其中,所述可扩展函数为所述程序对外暴露的函数,所述执行参数至少包括:执行参数值、待插入函数标识;
[0117]
确定模块302,用于响应于存在所述可扩展函数的执行参数,根据所述待插入函数标识,确定待插入函数以及所述待插入函数与所述可扩展函数之间的执行顺序;
[0118]
执行更改模块303,用于根据所述执行参数值、所述可扩展函数、所述待插入函数以及所述执行顺序,更改所述程序的执行流程。
[0119]
可选的,在所述执行顺序为所述待插入函数在所述可扩展函数之前执行的情况下,所述执行更改模块303,包括:
[0120]
第一执行子模块,用于将所述执行参数值传入所述待插入函数中进行执行,得到所述待插入函数的第一执行结果;
[0121]
第二执行子模块,用于将所述待插入函数的第一执行结果传入所述可扩展函数中进行执行。
[0122]
可选的,在所述执行顺序为所述待插入函数在所述可扩展函数之后执行的情况下,所述执行更改模块303,包括:
[0123]
第三执行子模块,用于将所述执行参数值传入所述可扩展函数中进行执行,得到所述可扩展函数的第一执行结果;
[0124]
第四执行子模块,用于将所述可扩展函数的第一执行结果传入所述待插入函数中进行执行。
[0125]
可选的,所述待插入函数包括第一待插入函数和第二待插入函数,在所述执行顺序为第一待插入函数、所述可扩展函数、所述第二待插入函数顺次执行的情况下,
[0126]
所述执行更改模块303,包括:
[0127]
第五执行子模块,用于将所述执行参数值传入所述第一待插入函数中进行执行,得到所述第一待插入函数的执行结果;
[0128]
第六执行子模块,用于将所述第一待插入函数的执行结果传入所述可扩展函数中进行执行,得到所述可扩展函数的第二执行结果;
[0129]
第七执行子模块,用于将所述可扩展函数的第二执行结果传入所述第二待插入函数中进行执行。
[0130]
可选的,所述装置300还包括:
[0131]
执行终止模块,用于响应于所述待插入函数的第一执行结果为报错信息,终止所述程序的执行。
[0132]
可选的,所述装置300还包括:
[0133]
函数暴露模块,用于向外暴露所述程序中的可扩展函数;
[0134]
参数接收模块,用于接收所述可扩展函数的传入参数,所述传入参数至少包括:所述可扩展函数对应的待插入函数、所述待插入函数标识;
[0135]
关联存储模块,用于将所述可扩展函数对应的待插入函数以及所述待插入函数标识进行关联存储;
[0136]
参数生成模块,用于生成所述可扩展函数的执行参数。
[0137]
基于同一发明构思,本发明另一实施例提供一种电子设备400,如图4所示。图4是本发明一实施例示出的一种电子设备的示意图。该电子设备包括存储器402、处理器401及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行时实现本发明上述任一实施例所述的程序执行方法中的步骤。
[0138]
基于同一发明构思,本发明另一实施例提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如本发明上述任一实施例所述的程序执行方法中的步骤。
[0139]
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0140]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0141]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
[0142]
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多
形式,均属于本发明的保护之内。
[0143]
本领域普通技术人员可以意识到,结合本发明实施例中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0144]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0145]
在本发明所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0146]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0147]
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0148]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
[0149]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

技术特征:
1.一种程序执行方法,其特征在于,所述方法包括:在程序的执行过程中,响应于监听到对可扩展函数的读操作,确定是否存在所述可扩展函数的执行参数;其中,所述可扩展函数为所述程序对外暴露的函数,所述执行参数至少包括:执行参数值、待插入函数标识;响应于存在所述可扩展函数的执行参数,根据所述待插入函数标识,确定待插入函数以及所述待插入函数与所述可扩展函数之间的执行顺序;根据所述执行参数值、所述可扩展函数、所述待插入函数以及所述执行顺序,更改所述程序的执行流程。2.根据权利要求1所述的程序执行方法,其特征在于,在所述执行顺序为所述待插入函数在所述可扩展函数之前执行的情况下,所述根据所述执行参数值、所述可扩展函数、所述待插入函数以及所述执行顺序,更改所述程序的执行流程,包括:将所述执行参数值传入所述待插入函数中进行执行,得到所述待插入函数的第一执行结果;将所述待插入函数的第一执行结果传入所述可扩展函数中进行执行。3.根据权利要求1所述的程序执行方法,其特征在于,在所述执行顺序为所述待插入函数在所述可扩展函数之后执行的情况下,所述根据所述执行参数值、所述可扩展函数、所述待插入函数以及所述执行顺序,更改所述程序的执行流程,包括:将所述执行参数值传入所述可扩展函数中进行执行,得到所述可扩展函数的第一执行结果;将所述可扩展函数的第一执行结果传入所述待插入函数中进行执行。4.根据权利要求1所述的程序执行方法,其特征在于,所述待插入函数包括第一待插入函数和第二待插入函数,在所述执行顺序为第一待插入函数、所述可扩展函数、所述第二待插入函数顺次执行的情况下,所述根据所述执行参数值、所述可扩展函数、所述待插入函数以及所述执行顺序,更改所述程序的执行流程,包括:将所述执行参数值传入所述第一待插入函数中进行执行,得到所述第一待插入函数的执行结果;将所述第一待插入函数的执行结果传入所述可扩展函数中进行执行,得到所述可扩展函数的第二执行结果;将所述可扩展函数的第二执行结果传入所述第二待插入函数中进行执行。5.根据权利要求2所述的程序执行方法,其特征在于,所述方法还包括:响应于所述待插入函数的第一执行结果为报错信息,终止所述程序的执行。6.根据权利要求1至5任一所述的程序执行方法,其特征在于,所述方法还包括:向外暴露所述程序中的可扩展函数;接收所述可扩展函数的传入参数,所述传入参数至少包括:所述可扩展函数对应的待插入函数、所述待插入函数标识;将所述可扩展函数对应的待插入函数以及所述待插入函数标识进行关联存储;生成所述可扩展函数的执行参数。7.一种程序执行装置,其特征在于,所述装置包括:
监听模块,用于在程序的执行过程中,响应于监听到对可扩展函数的读操作,确定是否存在所述可扩展函数的执行参数;其中,所述可扩展函数为所述程序对外暴露的函数,所述执行参数至少包括:执行参数值、待插入函数标识;确定模块,用于响应于存在所述可扩展函数的执行参数,根据所述待插入函数标识,确定待插入函数以及所述待插入函数与所述可扩展函数之间的执行顺序;执行更改模块,用于根据所述执行参数值、所述可扩展函数、所述待插入函数以及所述执行顺序,更改所述程序的执行流程。8.根据权利要求7所述的程序执行装置,其特征在于,在所述执行顺序为所述待插入函数在所述可扩展函数之前执行的情况下,所述执行更改模块,包括:第一执行子模块,用于将所述执行参数值传入所述待插入函数中进行执行,得到所述待插入函数的第一执行结果;第二执行子模块,用于将所述待插入函数的第一执行结果传入所述可扩展函数中进行执行。9.根据权利要求7所述的程序执行装置,其特征在于,在所述执行顺序为所述待插入函数在所述可扩展函数之后执行的情况下,所述执行更改模块,包括:第三执行子模块,用于将所述执行参数值传入所述可扩展函数中进行执行,得到所述可扩展函数的第一执行结果;第四执行子模块,用于将所述可扩展函数的第一执行结果传入所述待插入函数中进行执行。10.根据权利要求7所述的程序执行装置,其特征在于,所述待插入函数包括第一待插入函数和第二待插入函数,在所述执行顺序为第一待插入函数、所述可扩展函数、所述第二待插入函数顺次执行的情况下,所述执行更改模块,包括:第五执行子模块,用于将所述执行参数值传入所述第一待插入函数中进行执行,得到所述第一待插入函数的执行结果;第六执行子模块,用于将所述第一待插入函数的执行结果传入所述可扩展函数中进行执行,得到所述可扩展函数的第二执行结果;第七执行子模块,用于将所述可扩展函数的第二执行结果传入所述第二待插入函数中进行执行。11.根据权利要求8所述的程序执行装置,其特征在于,所述装置还包括:执行终止模块,用于响应于所述待插入函数的第一执行结果为报错信息,终止所述程序的执行。12.根据权利要求7至11任一所述的程序执行装置,其特征在于,所述装置还包括:函数暴露模块,用于向外暴露所述程序中的可扩展函数;参数接收模块,用于接收所述可扩展函数的传入参数,所述传入参数至少包括:所述可扩展函数对应的待插入函数、所述待插入函数标识;关联存储模块,用于将所述可扩展函数对应的待插入函数以及所述待插入函数标识进行关联存储;参数生成模块,用于生成所述可扩展函数的执行参数。
13.一种电子设备,其特征在于,包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至6中任一项所述的程序执行方法的步骤。14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的程序执行方法的步骤。

技术总结
本发明提供了一种程序执行方法、装置、电子设备及存储介质。该方法包括:在程序的执行过程中,响应于监听到对可扩展函数的读操作,确定是否存在可扩展函数的执行参数;其中,可扩展函数为程序对外暴露的函数,执行参数至少包括:执行参数值、待插入函数标识;响应于存在可扩展函数的执行参数,根据待插入函数标识,确定待插入函数以及待插入函数与可扩展函数之间的执行顺序;根据执行参数值、可扩展函数、待插入函数以及执行顺序,更改依赖包中程序的执行流程,以在依赖包的使用过程中,根据实际需求实现对依赖包中程序执行流程的更改,使得依赖包可以更加灵活地适应各种场景需求。依赖包可以更加灵活地适应各种场景需求。依赖包可以更加灵活地适应各种场景需求。


技术研发人员:安国徽
受保护的技术使用者:五八畅生活(北京)信息技术有限公司
技术研发日:2023.06.09
技术公布日:2023/10/6
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐