CN112363707B - 一种基于java反射技术的控制层通用调度方法 - Google Patents

一种基于java反射技术的控制层通用调度方法 Download PDF

Info

Publication number
CN112363707B
CN112363707B CN202011335313.4A CN202011335313A CN112363707B CN 112363707 B CN112363707 B CN 112363707B CN 202011335313 A CN202011335313 A CN 202011335313A CN 112363707 B CN112363707 B CN 112363707B
Authority
CN
China
Prior art keywords
url
control layer
scheduling method
layer
service
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
Application number
CN202011335313.4A
Other languages
English (en)
Other versions
CN112363707A (zh
Inventor
彭仲涛
钱朓
马洁
孙惠
许啸
史宁波
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nari Technology Co Ltd
NARI Nanjing Control System Co Ltd
Original Assignee
Nari Technology Co Ltd
NARI Nanjing Control System Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nari Technology Co Ltd, NARI Nanjing Control System Co Ltd filed Critical Nari Technology Co Ltd
Priority to CN202011335313.4A priority Critical patent/CN112363707B/zh
Publication of CN112363707A publication Critical patent/CN112363707A/zh
Application granted granted Critical
Publication of CN112363707B publication Critical patent/CN112363707B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种基于JAVA反射技术的控制层通用调度方法,该方法包括:在控制层定义普通调度方法,设置普通调度方法的URL路径,并调用通用调度方法,若控制层普通调度方法收到REST请求,检测可执行状态的标志dataReadyFlag,检测不通过则等待新的请求;若可执行状态的标志dataReadyFlag为真,根据URL最后一层路径和服务层实例service,以反射的方式获取service中方法名,判断是否找到方法,若找到,则调用反射方法的invoke方法,否则,返回未找到接口方法;判断invoke方法是否抛出异常,如果是,将异常通过接口返回,否则,添加附加信息并返回invoke方法执行结果。本发明所述的调度方法可以根据入参名称、入参数量和url路径匹配接口,方便相同逻辑代码重载,参数传入可直接使用而不需要解析,减少了资源浪费。

Description

一种基于JAVA反射技术的控制层通用调度方法
技术领域
本发明涉及调度方法技术领域,具体涉及一种基于JAVA反射技术的控制层通用调度方法。
背景技术
随着java编程技术的不断演进,各种框架犹如雨后春笋般快速发展。企业产品大多离不开前台页面和后台服务的交互,为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架,spring框架技术应运而生。
Spring的MVC框架使应用程序的不同方面分离,同时提供这些元素之间的松散耦合。控制反转的依赖注入(DI)模式可将多个复杂的Java应用程序类粘合在一起,同时让它们保持独立。面向方面的程序设计(AOP)模块提供了面向方面的程序设计实现,可以定义诸如方法拦截器和切入点等,从而使横切的代码彻底的解耦出来。
Spring的@Controller注解将代码标注为控制层,@RequestMapping配置url入口路径,@Service确定服务层代码。以spring技术开发的web服务接口存在代码编写工作量大,不便于问题排查,效率低等问题。
发明内容
发明目的:为了克服现有技术的不足,本发明提供一种基于JAVA反射技术的控制层通用调度方法,该方法可以解决现有技术中传参编码繁琐、问题查找效率低的问题。
技术方案:根据本发明的第一方面,提供基于JAVA反射技术的控制层通用调度方法,该方法包括:
(1)在控制层定义普通调度方法,该方法包括以下形参:HttpServletRequest、HttpServletResponse;
(2)设置普通调度方法的URL路径,并调用所述通用调度方法CommonUtils.webapiProcesser,若控制层普通调度方法收到REST请求,CommonUtils.webapiProcesser判断接口可执行状态的标志dataReadyFlag,检测不通过则等待新的请求;
(3)若可执行状态的标志dataReadyFlag为真,通过入参HttpServletRequest的getReader()方法和getParameterMap()方法获取URL参数;
(4)根据URL最后一层路径(文中以methodName表示)和服务层实例service,以反射的方式获取service中方法名为methodName的方法,判断是否找到所述方法,若找到,则调用反射方法的invoke方法,否则,返回未找到接口方法;
(5)判断invoke方法是否抛出异常,如果是,将异常通过接口返回,否则,添加附加信息并返回invoke方法执行结果;
进一步的,包括:
在服务层约定以每个方法的名称作为URL的最后一层路径。
进一步的,包括:
所述以反射的方式获取以URL的最后一层路径(methodName)作为方法名的方法,支持的传参方式包括:无参方式;参数为MAP方式;参数为HttpServletRequest和HttpServletResponse;参数为Object数组,即按服务层方法参数类型和顺序;获取到的以上四种传参方式,有且只有一个有效。通过methodName获取反射方法时,忽略大小写。
进一步的,包括:
异常信息,响应码、响应状态、异常原因和接口耗时。
根据本发明的第二方面,提供一种计算机装置,所述装置包括:
一个或多个处理器;
存储器;以及
一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,所述程序被处理器执行时实现如上述的步骤。
有益效果:(1)本发明所述的调度方法只需要将服务类实例和可执行标志传入,可以在同一个文件中将多个服务类的接口定义,且编码完成之后,服务类再增加接口也无需修改控制层代码,新增接口自动加入遍历队列;
(2)可执行标志可以根据当前业务逻辑状态控制接口执行,有效减少资源浪费,且可以快速响应;
(3)本发明所述的调度方法可以根据入参名称、入参数量和url路径匹配接口,方便相同逻辑代码重载,参数传入可直接使用而不需要解析,减少了资源浪费;
(4)本发明所述的调度方法返回数据带有附加信息,结构规范、便于代码优化;还可以捕捉并返回代码的异常,方便问题排查;以及还可以根据自定义的注解实现控制服务类方法的可见性。
总的来说,本发明使得web后台接口的开发化繁为简,封装了多数url接口的重复部分,使得web接口开发更智能化。为程序员后台开发、优化节省了大量时间,使其能够创造更多价值。
附图说明
图1为本发明实施例所述的调度方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供一种基于JAVA反射技术的控制层通用调度方法,包括以下步骤:
S1定义控制层代码类本文以TestContorller做示例,设置控制层接口方法的URL路径,如类TestContorller中的@RequestMapping("/test/");
S2在控制层定义普通调度方法,该方法包括以下形参:HttpServletRequest接口、HttpServletResponse接口、服务层实例service以及布尔型变量接口可执行状态的标志dataReadyFlag(后两个参数是以全局变量的方式存在),如下例中的getTest方法;
Figure BDA0002797024960000031
Figure BDA0002797024960000041
控制层普通调度方法调用CommonUtils.webapiProcesser,并且将服务层实例service以参数的形式传入。同时,设置方法的url路径为“/*”,表示可通配任意最后一层url路径,例如示例类TestContorller中@RequestMapping("*")。
S3定义业务层代码类,文中以TestService做示例。类中定义了多个方法,部分上面添加了@URLVISIBLE注解,只有添加注解的才可被通用调度方法通过反射的方式找到,起到对部分代码的保护作用。
TestService实现方式:
Figure BDA0002797024960000042
Figure BDA0002797024960000051
S4定义dataReadyFlag标志位具体实现。
dataReadyFlag是一个布尔型变量,标志当前模块是否已经具备继续执行的条件,例如数据库是否已就位,数据缓存是否已完成等。调度方法CommonUtils.webapiProcesser在被调用时会检查dataReadyFlag的值,为真,则获取入参HttpServletRequest.getReader()和HttpServletRequest.getParameterMap(),否则,返回未准备好信息,”data notready”;
S5控制层代码类TestContorller接收到REST请求,且dataReadyFlag为真时,从HttpServletRequest获取url最后一层路径(methodName)和url带来的参数。以反射的方式获取TestService中名称为methodName的方法。遍历过程可忽略方法名和参数名称大小写,忽略大小写通过以下方式实现:在CommonUtils.webapiProcesser中将请求路径URL都转换成小写,遍历TestService类的方法时也都转换成小写进行匹配。
S6反射类TestService遍历所有方法,获取以methodName命名得方法时,分别获取以下四种方式的方法:参数为Object数组(按服务层方法参数类型和顺序)参数为MAP方式;参数为HttpServletRequest和HttpServletResponse;无参方式;。其中,methodWithArgs:以基础类型为参的方法;
methodWithParamMap:以Map为入参的方法;
methodWithHttpServletArgs:以HttpServletRequest、HttpServletResponse为入参的方法;
methodWithOutArg:没有入参的方法;
Figure BDA0002797024960000061
Figure BDA0002797024960000071
其中,getMethodWithArgs包含了根据请求参数名称和个数查找方法的逻辑。
获取到的以上四种传参方式,最多有一个有效。如果都无效则CommonUtils.webapiProcesser退出,并返回Failed to call method<methodname>;
获取到了反射方法时,调用反射方法的invoke方法,并传入参数(在S4已经获取)获得运行结果,如果没有抛出异常,则添加附带信息并退出通用方法并返回信息。如果抛出异常,则将异常信息添加到结果中退出通用返回方法。添加附带信息方便定位问题和调优。附带信息有响应码(可自定义)、响应状态、异常原因、接口耗时。运行结果中如果存在和附带信息相同的关键字,则不覆盖。
本申请将异常直接展现在url接口返回中的,也就是不用查看后台日志既可以定位问题。如果后台日志有几个G的大小,查看日志文件是很麻烦的。
附件信息包括:响应码(可自定义)、响应状态、异常原因、接口耗时。
在服务层中编写普通java业务逻辑类,约定以方法名称作为对外接口url路径,为了保护不需要对外开发的方法,需要在需要对外开放的方法上添加注解@URLVISIBLE。
通用调度原理中描述的方式存在一个问题:服务类中的所有public方法都可以被访问到。这样导致的结果是不安全,误操作后可能会使数据不准确,更甚者还可能导致系统异常。此问题可通过定义一个注解解决。
通用调度在根据url路径和参数遍历服务类的方法时,通过自定义的注解进行过滤,没有使用注解标注的方法默认不对外开放。
访问方式以及对应的url:
1.getTest1
访问url:test/getTest1
此种方式可以带任意参数,但是接口方法不处理
2.getTest2
发现getTest2因入参不一致,被重载了,通用调度方法会根据参数的个数和参数名称区分接口方法
访问url:test/getTest2?parm1=***&parm2=***&parm3=***
可以访问到第一个getTest2方法,多余的参数接口方法不处理。
访问url:test/getTest2?parm1=***&parm2=***
可以访问到第二个getTest2方法,多余的参数可以叫做parm3之外的任意名称,且方法不处理。
3.getTest3
访问url:test/getTest3?key1=***&key2=***&key3=***
此种方式可以带任意参数,使用时需从map中使用get方法获取。
4.getTest4
访问url:test/getTest4
此种方式可以带任意参数,但所有参数都需从request中获取。
5.getTest5
使用test/getTest5报错,因为该方法对url不可见,没有添加注解@URLVISIBLE,遍历方法时被过滤掉了。
观察TestService的实现可发现,通用调度方法支持四种传参方式,其中getTest2传参方式可以根据参数名称、参数个数自动匹配方法名、参数名和参数个数都相同的接口方法。因具体业务需求新增getTest6时,TestContorller无需做任何修改,当然不要忘记@URLVISIBLE。
基于与方法实施例相同的技术构思,根据本发明的另一实施例,提供一种计算机装置,所述装置包括:一个或多个处理器;存储器;以及一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,所述程序被处理器执行时实现方法实施例中的各步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。

Claims (5)

1.一种基于JAVA反射技术的控制层通用调度方法,其特征在于,该方法包括:
(1)在控制层定义普通调度方法,该方法包括以下形参:HttpServletRequest、HttpServletResponse;
(2)设置普通调度方法的URL路径,并调用通用调度方法CommonUtils.webapiProcesser,若控制层普通调度方法收到REST请求,CommonUtils.webapiProcesser判断接口可执行状态的标志dataReadyFlag,检测不通过则等待新的请求;
(3)若可执行状态的标志dataReadyFlag为真,通过入参HttpServletRequest的getReader()方法和getParameterMap()方法获取URL参数;
(4)根据URL最后一层路径和服务层实例service,以反射的方式获取service中方法名,判断是否找到所述方法,若找到,则调用反射方法的invoke方法,否则,返回未找到接口方法;
(5)判断invoke方法是否抛出异常,如果是,将异常通过接口返回,否则,添加附加信息并返回invoke方法执行结果。
2.根据权利要求1所述的基于JAVA反射技术的控制层通用调度方法,其特征在于,在服务层约定以每个方法的名称作为URL的最后一层路径。
3.根据权利要求1所述的基于JAVA反射技术的控制层通用调度方法,其特征在于,所述以反射的方式获取以URL的最后一层路径作为方法名的方法,支持的传参方式包括:无参方式;参数为MAP方式;参数为HttpServletRequest和HttpServletResponse;参数为Object数组,即按服务层方法参数类型和顺序,获取到的以上四种传参方式,有且只有一个有效,通过URL的最后一层路径作为方法名获取反射方法时,忽略大小写。
4.根据权利要求1所述的基于JAVA反射技术的控制层通用调度方法,其特征在于,所述附加信息包括:异常信息,响应码、响应状态、异常原因和接口耗时。
5.一种计算机装置,其特征在于,所述装置包括:
一个或多个处理器;
存储器;以及
一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,所述程序被处理器执行时实现如权利要求1-4中的任一项所述的方法。
CN202011335313.4A 2020-11-25 2020-11-25 一种基于java反射技术的控制层通用调度方法 Active CN112363707B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011335313.4A CN112363707B (zh) 2020-11-25 2020-11-25 一种基于java反射技术的控制层通用调度方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011335313.4A CN112363707B (zh) 2020-11-25 2020-11-25 一种基于java反射技术的控制层通用调度方法

Publications (2)

Publication Number Publication Date
CN112363707A CN112363707A (zh) 2021-02-12
CN112363707B true CN112363707B (zh) 2022-09-09

Family

ID=74533288

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011335313.4A Active CN112363707B (zh) 2020-11-25 2020-11-25 一种基于java反射技术的控制层通用调度方法

Country Status (1)

Country Link
CN (1) CN112363707B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113625998B (zh) * 2021-08-10 2023-11-03 北京京东振世信息技术有限公司 一种请求处理方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102402427A (zh) * 2010-09-09 2012-04-04 阿里巴巴集团控股有限公司 一种Java应用程序的更新方法及装置
CN106648920A (zh) * 2016-09-29 2017-05-10 山东浪潮云服务信息科技有限公司 一种基于接口的数据通信方法
CN107301098A (zh) * 2017-06-15 2017-10-27 搜易贷(北京)金融信息服务有限公司 一种基于Thrift协议的远程过程调用装置、方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102402427A (zh) * 2010-09-09 2012-04-04 阿里巴巴集团控股有限公司 一种Java应用程序的更新方法及装置
CN106648920A (zh) * 2016-09-29 2017-05-10 山东浪潮云服务信息科技有限公司 一种基于接口的数据通信方法
CN107301098A (zh) * 2017-06-15 2017-10-27 搜易贷(北京)金融信息服务有限公司 一种基于Thrift协议的远程过程调用装置、方法及系统

Also Published As

Publication number Publication date
CN112363707A (zh) 2021-02-12

Similar Documents

Publication Publication Date Title
AU2010337107B2 (en) Managing objects using a client-server bridge
US11385993B2 (en) Dynamic integration of command line utilities
US7673175B2 (en) Computer configuration tracking system able to restore a previous configuration
US8291047B2 (en) Screen scraping interface
US7263632B2 (en) Programmatic computer problem diagnosis and resolution and automated reporting and updating of the same
US6668370B1 (en) Synchronous execution of object-oriented scripts and procedural code from within an interactive test facility
US8336032B2 (en) Implementing enhanced template debug
US8438418B2 (en) Simplifying automated software maintenance of data centers
CN109634718B (zh) 云平台创建镜像的方法及系统
US9442822B2 (en) Providing a visual representation of a sub-set of a visual program
CN115309566B (zh) 一种服务接口的动态管理方法及系统
CN110399107B (zh) 日志打印方法、装置、存储介质及设备
CN112506854B (zh) 页面模板文件的存储和页面生成方法、装置、设备及介质
CN112363707B (zh) 一种基于java反射技术的控制层通用调度方法
KR20040028475A (ko) 액세스가능 시스템 이벤트 메커니즘 및 방법
CN114661375A (zh) 应用集成方法及装置
CN113656001A (zh) 平台组件开发方法、装置、计算机设备及存储介质
US20130307854A1 (en) Method and System for Visualising a System Model
US20180365132A1 (en) Adaptive software testing
KR100930962B1 (ko) 알피씨 기반 소프트웨어의 원격지 보안 테스팅 장치 및방법
US20030188042A1 (en) Program event activated and configured debugger method, system, article of manufacture, computer program product, and data structure
CN112130900B (zh) 一种bmc的用户信息管理方法、系统、设备以及介质
CN112464596A (zh) 回归测试方法、系统、设备及可读存储介质
CN116225576B (zh) 应用程序的数据环境切换方法、装置、电子设备及介质
CN111143206A (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
GR01 Patent grant
GR01 Patent grant