CN114327375A - 一种检测java代码依赖关系的方法、工具以及计算机设备 - Google Patents
一种检测java代码依赖关系的方法、工具以及计算机设备 Download PDFInfo
- Publication number
- CN114327375A CN114327375A CN202111617934.6A CN202111617934A CN114327375A CN 114327375 A CN114327375 A CN 114327375A CN 202111617934 A CN202111617934 A CN 202111617934A CN 114327375 A CN114327375 A CN 114327375A
- Authority
- CN
- China
- Prior art keywords
- class
- code
- standard
- customized
- codes
- 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.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种检测java代码依赖关系的方法、工具以及计算机设备。该检测工具利用API路径对比、注解分析、类反射、JAVA类继承、JAVA方法重写、代码对比等java代码本身的特性自动化检索代码依赖关系,将此工具并打包为一个spring的boot依赖;被扫描的服务添加对当前工具boot的依赖,配套前端一键检索按钮,可扫描出服务中所有客制化代码和标准代码的依赖关系,极大地降低了开发人员因人工在海量代码中查找客制化代码对标准代码的依赖时间成本以及客观性遗漏,降低了开发者本身的工作量,也降低了产品的发布上线产生的影响以及风险。
Description
技术领域
本申请涉及基于java的标准化产品迭代技术领域,特别是涉及一种检测客制化代码与标准代码的依赖关系的方法。
背景技术
数字化采购平台作为一个云SAAS服务,其支持的标准化业务场景是非常丰富的,2B产品和2C产品的具体需求是不同的;仅仅是标准的产品模块很难满足不同行业的公司对业务场景的需求,所以客制化定制以及基于标准客制化定制的场景由此衍生。
为了减少因为标准化产品迭代对客制化代码的影响,有必要及早判断出客制化代码与标准代码的依赖关系,在影响未发生前解决问题。
发明内容
基于此,针对上述技术问题,提供一种检测java代码依赖关系的方法、工具以及计算机设备,利用java本身的特性,自动化检索出客制化代码与标准代码依赖关系,降低上线风险。
第一方面,一种检测java代码依赖关系的方法,包括:
接收用户输入的检索关键字;
确定所述检索关键字的代码类型;多种代码类型分别对应于基于标准客制化API、基于标准客制化继承重写、客制化调用标准三种情况;
针对当前检索关键字的代码类型,利用java代码本身的特性检索得到服务中所有客制化代码和标准代码的依赖关系,并进行数据落表,反馈检索结果。
进一步地,对应于所述基于标准客制化API的情况,具体实现步骤包括:
a1)通过@RestController注解获取bean工厂中所有的Controller类;
a2)通过@GetMaping、@DeleteMaping、@PostMapping、@PutMapping注解过去被扫描Controller类所有方法的API路径,并在Map中记录路径与类方法集合的对应关系;
a3)遍历Map,检索得到Map中类方法集合大于1的数据,其中一条为标准方法指向API路径,其余均为客制化定制方法指向;
a4)将当前结果定义为Controller客制化类型,并进行数据落表。
进一步地,对应于所述基于标准客制化继承重写的情况,具体实现步骤包括:
b1)通过@Tenant注解获取bean工厂中所有所有客制化注解的实现类;
b2)获取具有客制化注解类中所有的方法对象,获取客制化类的父类及所有方法对象;
b3)对比子类和父类中方法名一致、方法入参一致的方法,new Map存储父类方法为key,子类方法放入value为list的集合,记录标准类+方法与客制化类+方法的对应关系,并进行数据落表。
进一步地,对应于所述客制化调用标准的情况,具体实现步骤包括:
c1)遍历bean工厂,获取所有与数字化采购平台业务实现相关的类;
c2)循环并判断当前的类,获取当前类路径,判断当类是否为标准服务二开工程的类;
c3)若当前类为标准服务二开工程的类,则解压满足该类所属的jar包;获取当前解压后对应类的class路径,获取其文件流还原为代码文本,记录当前类名与代码文本的关系到Map,并将Map本地缓存;
c4)获取当前类所有注入的对象,根据类路径筛选注入的对象为标准服务的类;若注入的对象为标准服务的类,根据相应的关键字(关键词的形式可以是“注入类名称+)”)在代码文本中检索,检索出的方法即为客制化代码调用标准的方法;
c5)获取当前类其父类所有的方法名,检索父类方法名在当前类文本中存在的方法,检索出的方法即为客制化代码调用标准的方法;
c6)将步骤c4)和步骤c5)获取的结果存在Map,结合步骤3)记录的类名与代码文本的关系,最后进行数据落表。
进一步地,步骤c4)中所述相应的关键字的形式为:注入的类属性名作为检索的开始值,“)”作为检索的结尾值。
进一步地,在所述接收用户输入的检索关键字的步骤之前,所述检测java代码依赖关系的方法的主程序被打包为一个spring的boot依赖;被扫描的服务添加对当前工具boot的依赖。
第二方面,一种检测java代码依赖关系的工具,其特征在于,被打包为一个spring的boot依赖;该工具包括:
检索输入模块,用于在人机交互界面生成检索输入框以及一键检索按钮,接收用户输入的检索关键字;
检索代码类型识别模块,用于确定所述检索关键字的代码类型;多种代码类型分别对应于基于标准客制化API、基于标准客制化继承重写、客制化调用标准三种情况;
扫描执行模块,用于针对当前检索关键字的代码类型,利用java代码本身的特性检索得到服务中所有客制化代码和标准代码的依赖关系,并进行数据落表,反馈检索结果。
第三方面,一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述的检测java代码依赖关系的方法。
本发明至少具有以下有益效果:
本发明实现简单,通过java代码本身的特性自动化地检测出基于标准客制化定制的代码逻辑及依赖关系,并将检索的的依赖关系存贮表中;配套可视化前端,在前端界面可直接通过关键字检索对应的类名、方法名、API路径即可获取到依赖的对应结果。测试结果表明,检索覆盖率高达90%,使用者也可以通过此工具快速定位问题。
本发明通过API路径对比、注解分析、类反射、JAVA类继承、JAVA方法重写、文本检索是此工具的核心逻辑,并将此工具并打包为一个spring的boot依赖;被扫描的服务添加对当前工具boot的依赖,配套前端一键检索按钮,可扫描出服务中所有客制化代码和标准代码的依赖关系,以便开发者在开发过程中检查当前修改代码对依赖者代码的影响。
附图说明
图1为本发明一个实施例提供的检测java代码依赖关系的工具的原理示意图;
图2为本发明一个实施例中针对第三种情况的客制化调用标准检索逻辑图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种检测java代码依赖关系的工具,通过API路径对比、注解分析、类反射、JAVA类继承、JAVA方法重写、代码对比检索代码是此工具的核心逻辑,并将此工具并打包为一个spring的boot依赖;被扫描的服务添加对当前工具boot的依赖,配套前端一键检索按钮,可扫描出服务中所有客制化代码和标准代码的依赖关系,以便开发者在开发过程中检查当前修改代码对依赖者代码的影响。该工具利用java本身的特性,自动化检索出客制化代码与标准代码依赖关系,降低上线风险。
该工具至少包括以下程序模块:
检索输入模块,用于在人机交互界面生成检索输入框以及一键检索按钮,接收用户输入的检索关键字;
检索代码类型识别模块,用于确定所述检索关键字的代码类型;多种代码类型分别对应于基于标准客制化API、基于标准客制化继承重写、客制化调用标准三种情况;
扫描执行模块,用于针对当前检索关键字的代码类型,利用java代码本身的特性检索得到服务中所有客制化代码和标准代码的依赖关系,并进行数据落表,反馈检索结果。
相应的,在一个实施例中,提供了一种检测java代码依赖关系的方法,包括:
S1:接收用户输入的检索关键字;
S2:确定所述检索关键字的代码类型;多种代码类型分别对应于基于标准客制化API、基于标准客制化继承重写、客制化调用标准三种情况;
S3:针对当前检索关键字的代码类型,利用java代码本身的特性检索得到服务中所有客制化代码和标准代码的依赖关系,并进行数据落表,反馈检索结果。
本发明的实现步骤根据检索代码的类型不同,实现的具体步骤不同,具体步骤如下:
(1)API路径重写,存在客制化方案,不同Controller中存在API接口路径一致的情况,对应的场景时前端调用统一个API,不同的用户动态切入不同的Controller执行类。
a)通过@RestController注解获取bean工厂中所有的Controller类;
b)通过@GetMaping、@DeleteMaping、@PostMapping、@PutMapping注解过去被扫描Controller类所有方法的API路径,并在Map中记录路径与类方法集合的对应关系;
c)遍历Map,检索Map中value(类方法集合)大于1的数据,大于1则表明,一个API路径多个方法进行了使用,检索出来的数据,一条为标准方法指向API路径,其余的皆为客制化定制方法指向;
d)将当前结果定义为Controller客制化类型,并进行数据落表。
(2)类继承方法重写,存在客制化方案,继承标准service实现,重写部分标准方法,客制化用户逻辑,根据不同的用户切入到不同的子类实现。
a)通过@Tenant注解获取bean工厂中所有所有客制化注解的实现类;
b)获取具有客制化注解类中所有的方法对象,获取客制化类的父类及所有方法对象;
c)对比子类和父类中方法名一致,方法入参一致的方法,new Map存储父类方法为key,子类方法放入value为list的集合,记录标准类+方法与客制化类+方法的对应关系;
d)记录对应关系到表。
(3)客制化类调用标准方法,存在客制化实现,标准提供的方法满足大部分逻辑,客制化类只需要调用标准方法,在补充部分客制化逻辑既可以满足客制化业务需求,具体步骤如下,流程可参考图2。
a)遍历bean工厂中所有非Controller、Config等与数字采购平台业务实现有关的类;
b)判断并循环当前的类,获取当前类路径,判断当类是否为标准服务二开工程的类;
c)解压满足上述条件类所属的jar包;
d)获取当前解压后对应类的class路径,进而获取其文件流还原为代码文本,记录当前类名与代码文本的关系到Map,为防止后续重复的解压、解析,将Map本地缓存;
e)获取当前类所有注入的对象,根据类路径筛选注入的对象为标准服务的类;
f)注入的类属性名作为检索的开始值,“)”作为检索的结尾值,在代码文本检索,检索出的方法则为客制化代码调用标准的方法;
g)获取当前类属于父类(属于标准服务的类)中所有方法名,检索父类方法名在当前类文本中存在的方法,检索出的方法则为客制化代码调用标准的方法;
h)将f、g获取的结果存在Map,并最后落表。
以上步骤将基于标准客制化API、基于标准客制化继承重写、客制化调用标准三种情况全面扫描,并最终落表,形成检索最终数据。
本发明实施例通过API路径对比、注解分析、类反射、JAVA类继承、JAVA方法重写、代码对比等java代码本身的特性自动化检索代码依赖关系,极大地降低了开发人员因人工在海量代码中查找客制化代码对标准代码的依赖时间成本以及客观性遗漏,降低了开发者本身的工作量。同时通过自动化工具协助定位问题并解决问题后,产品的发布上线产生的影响以及风险会极大的降低。
在一个实施例中,还提供了一种计算机设备,该计算机设备可以是终端。该计算机设备通常可包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机程序被处理器执行时以实现上述实施例的一种检测java代码依赖关系的方法。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (8)
1.一种检测java代码依赖关系的方法,其特征在于,包括:
接收用户输入的检索关键字;
确定所述检索关键字的代码类型;多种代码类型分别对应于基于标准客制化API、基于标准客制化继承重写、客制化调用标准三种情况;
针对当前检索关键字的代码类型,利用java代码本身的特性检索得到服务中所有客制化代码和标准代码的依赖关系,并进行数据落表,反馈检索结果。
2.根据权利要求1所述的检测java代码依赖关系的方法,其特征在于,对应于所述基于标准客制化API的情况,具体实现步骤包括:
a1)通过@RestController注解获取bean工厂中所有的Controller类;
a2)通过@GetMaping、@DeleteMaping、@PostMapping、@PutMapping注解过去被扫描Controller类所有方法的API路径,并在Map中记录路径与类方法集合的对应关系;
a3)遍历Map,检索得到Map中类方法集合大于1的数据,其中一条为标准方法指向API路径,其余均为客制化定制方法指向;
a4)将当前结果定义为Controller客制化类型,并进行数据落表。
3.根据权利要求1所述的检测java代码依赖关系的方法,其特征在于,对应于所述基于标准客制化继承重写的情况,具体实现步骤包括:
b1)通过@Tenant注解获取bean工厂中所有所有客制化注解的实现类;
b2)获取具有客制化注解类中所有的方法对象,获取客制化类的父类及所有方法对象;
b3)对比子类和父类中方法名一致、方法入参一致的方法,new Map存储父类方法为key,子类方法放入value为list的集合,记录标准类+方法与客制化类+方法的对应关系,并进行数据落表。
4.根据权利要求1所述的检测java代码依赖关系的方法,其特征在于,对应于所述客制化调用标准的情况,具体实现步骤包括:
c1)遍历bean工厂,获取所有与数字化采购平台业务实现相关的类;
c2)循环并判断当前的类,获取当前类路径,判断当类是否为标准服务二开工程的类;
c3)若当前类为标准服务二开工程的类,则解压满足当前类所属的jar包;获取当前解压后对应类的class路径,获取其文件流还原为代码文本,记录当前类名与代码文本的关系到Map,并将Map本地缓存;
c4)获取当前类所有注入的对象,根据类路径筛选注入的对象为标准服务的类;若注入的对象为标准服务的类,根据相应的关键字在代码文本中检索,检索出的方法即为客制化代码调用标准的方法;
c5)获取当前类其父类所有的方法名,检索父类方法名在当前类文本中存在的方法,检索出的方法即为客制化代码调用标准的方法;
c6)将步骤c4)和步骤c5)获取的结果存在Map,结合步骤3)记录的类名与代码文本的关系,最后进行数据落表。
5.根据权利要求4所述的检测java代码依赖关系的方法,其特征在于,步骤c4)中所述相应的关键字的形式为:注入的类属性名作为检索的开始值,“)”作为检索的结尾值。
6.根据权利要求1所述的检测java代码依赖关系的方法,其特征在于,在所述接收用户输入的检索关键字的步骤之前,所述检测java代码依赖关系的方法的主程序被打包为一个spring的boot依赖;被扫描的服务添加对当前工具boot的依赖。
7.一种检测java代码依赖关系的工具,其特征在于,被打包为一个spring的boot依赖;该工具包括:
检索输入模块,用于在人机交互界面生成检索输入框以及一键检索按钮,接收用户输入的检索关键字;
检索代码类型识别模块,用于确定所述检索关键字的代码类型;多种代码类型分别对应于基于标准客制化API、基于标准客制化继承重写、客制化调用标准三种情况;
扫描执行模块,用于针对当前检索关键字的代码类型,利用java代码本身的特性检索得到服务中所有客制化代码和标准代码的依赖关系,并进行数据落表,反馈检索结果。
8.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述的检测java代码依赖关系的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111617934.6A CN114327375A (zh) | 2021-12-27 | 2021-12-27 | 一种检测java代码依赖关系的方法、工具以及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111617934.6A CN114327375A (zh) | 2021-12-27 | 2021-12-27 | 一种检测java代码依赖关系的方法、工具以及计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114327375A true CN114327375A (zh) | 2022-04-12 |
Family
ID=81014462
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111617934.6A Pending CN114327375A (zh) | 2021-12-27 | 2021-12-27 | 一种检测java代码依赖关系的方法、工具以及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114327375A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115858354A (zh) * | 2022-11-29 | 2023-03-28 | 广发银行股份有限公司 | 一种测试覆盖率计算方法、系统、终端及存储介质 |
CN117951315A (zh) * | 2024-02-06 | 2024-04-30 | 佛山科学技术学院 | 一种代码依赖的检索方法 |
-
2021
- 2021-12-27 CN CN202111617934.6A patent/CN114327375A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115858354A (zh) * | 2022-11-29 | 2023-03-28 | 广发银行股份有限公司 | 一种测试覆盖率计算方法、系统、终端及存储介质 |
CN115858354B (zh) * | 2022-11-29 | 2023-08-18 | 广发银行股份有限公司 | 一种测试覆盖率计算方法、系统、终端及存储介质 |
CN117951315A (zh) * | 2024-02-06 | 2024-04-30 | 佛山科学技术学院 | 一种代码依赖的检索方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11755387B1 (en) | Updating code of an app feature based on a value of a query feature | |
US8756593B2 (en) | Map generator for representing interrelationships between app features forged by dynamic pointers | |
US8589876B1 (en) | Detection of central-registry events influencing dynamic pointers and app feature dependencies | |
CN100468356C (zh) | 通过属性控制的测试实例继承 | |
US20210109748A1 (en) | Application programming interface for a registry | |
US11210072B2 (en) | System for generating a map illustrating bindings | |
CN108108297A (zh) | 自动化测试的方法和装置 | |
CN114327375A (zh) | 一种检测java代码依赖关系的方法、工具以及计算机设备 | |
CN110955428A (zh) | 一种页面显示方法、装置、电子设备及介质 | |
CN111124906A (zh) | 基于动态埋点的跟踪方法、编译方法、装置和电子设备 | |
CN112667426A (zh) | 日志分析方法及装置 | |
CN107908679B (zh) | 脚本语句转换方法、装置及计算机可读存储介质 | |
CN111008017B (zh) | 一种基于oclint的待提交文件预审方法及相关组件 | |
CN109284222B (zh) | 软件单元、数据处理系统中的项目测试方法、装置及设备 | |
CN116911588A (zh) | 业务流程执行方法、装置、设备及存储介质 | |
CN112256318A (zh) | 一种用于依赖产品的构建方法及设备 | |
CN113377719B (zh) | 一种系统异常关机时间获取方法及系统 | |
CN113760617A (zh) | 故障处理方法及装置、设备、存储介质 | |
CN111352631B (zh) | 一种接口兼容性检测方法及装置 | |
CN111488144A (zh) | 一种数据处理方法以及设备 | |
CN112817782B (zh) | 一种数据采集上报方法、装置、电子设备和存储介质 | |
CN111459774A (zh) | 一种应用程序的流量的获取方法、装置、设备及存储介质 | |
CN115269040A (zh) | 一种租户业务应用的拓展方法、装置及系统 | |
CN113177157B (zh) | 标签分离方法、装置、设备及存储介质 | |
CN112558975B (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 |