CN107656775A - 一种基于ClassLoader的自定义类查找方法 - Google Patents
一种基于ClassLoader的自定义类查找方法 Download PDFInfo
- Publication number
- CN107656775A CN107656775A CN201710971621.8A CN201710971621A CN107656775A CN 107656775 A CN107656775 A CN 107656775A CN 201710971621 A CN201710971621 A CN 201710971621A CN 107656775 A CN107656775 A CN 107656775A
- Authority
- CN
- China
- Prior art keywords
- class
- classloader
- information
- path
- self
- 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.)
- Withdrawn
Links
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/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及IT技术领域,特别是指一种基于ClassLoader的自定义类查找方法。本发明首先取得运行环境的ClassLoader;其次根据类路径查找类的URL;然后读取类的相关信息;最后根据类的自定义注解信息对类进行归类保存。本发明适用于Java语言开发的普通Java程序和Web程序,搜索类的范围广,能满足复杂的业务要求。
Description
技术领域
本发明涉及IT技术领域,特别是指一种基于ClassLoader的自定义类查找方法。
背景技术
随着信息系统的复杂性日益增大,使用反射机制设计的系统越来越多。根据不同的业务需要通过反射去获得相应的处理类的前提是如何获得类的信息。传统的方法有两种:第一种是使用配置文件的方式记录。这种方式在业务复杂性较大或者类比较多的时候,配置文件就显得不够灵活,不易于扩展、可维护性差。第二种是采用Jdk基础的反射类,通过扫描文件或jar包中的文件获取业务系统的处理类。这种方式实现比较简单也易于扩展,但缺点是只能扫描到处理程序外部的class文件或jar文件。对于嵌套的jar文件,由于不能在操作系统中识别为文件,导致此方法扫描的范围有局限性,对于普通的以jar方式运行的程序就无法使用。
发明内容
本发明解决的技术问题在于提供一种基于ClassLoader的自定义类查找方法,在整个类加载的范围内查找业务需要的类,提供了一种搜索范围广、灵活的、易于扩展的解决方案。
本发明解决上述技术问题的技术方案是:
所述的方法包括如下步骤:
步骤1:取得运行环境的ClassLoader;
步骤2:根据类路径查找类的URL;
步骤3:读取类的相关信息;
步骤4:根据类的自定义注解信息对类进行归类保存。
所述的运行环境的ClassLoader,通常是程序运行当前线程的类加载器,若当前线程没有定义则使用系统的类加载器。
所述的类路径是指识别一个类的基础路径,包括com/gcloud/cloud/adapter/xxx.class;
所述的类的URL是定位这个类在操作系统的文件路径或jar包中的路径,是资源的定位路径。
所述的类的相关信息主要是类的基础信息,包括类的名字,类的属性方法等信息。
所述的自定义注解是指用户根据系统业务需要定义的注解,能标记每个类在程序中的业务属性;
所述的对类进行归类保存,主要是根据业务属性的不同把相关信息保存在内存中,此内存信息作为全局的信息,能被系统所有逻辑引用。
本发明查找类的范围广,能查找普通文件的类、Jar包中的类和Jar包里面嵌套的Jar包中的类;本发明适用于Java语言开发的普通Java程序和Web程序,搜索类的范围广,能满足复杂的业务要求。其他面向对象语言若使用类似的ClassLoader管理类的也可参考此方法进行改造使用。
附图说明
下面结合附图对本发明进一步说明:
图1为本发明的流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图并以实际开发案例作进一步详细说明。如图1所示,具体实施过程如下:
本样例根据本发明的原理,结合spring开源框架的部分工具类对类进行加载解析,最后把查找到的类保存在程序运行的内存中。
1、取得运行环境的ClassLoader。
下面三种方式可以取得ClassLoader,优先使用第一种获取本运行环境的ClassLoader
ClassLoader cl=Thread.currentThread().getContextClassLoader();
ClassLoader cl=XXXX.class.getClassLoader();
ClassLoader cl=ClassLoader.getSystemClassLoader();
2、根据类路径查找类的URL。
定义需要查找的类路径,支持*通配符
String packageSearchPath =
″classpath*:com/gcloud/cloud/adapter/**/*.class″;
根据指定的路径查找对应路径的所有类
PathMatchingResourcePatternResolver resolver=new
PathMatchingResourcePatternResolver();
Resource[]resources=resolver.getResources(packageSearchPath);
查找出来类的URL格式如下:
URL
[jar:file:/D:/new_svn/gcloud-multicloud/gcloud-cloud-adapter/gcloud-cloud-adapter-api/target/gcloud-cloud-adapter-api-0.0.1-SNAPSHOT.jar!/BO OT-INF/classes!/com/gcloud/cloud/adapter/Adapter.class]
URL
[jar:file:/D:/new_svn/gcloud-multicloud/gcloud-cloud-adapter/gcloud-cloud-adapter-api/target/gcloud-cloud-adapter-api-0.0.1-SNAPSHOT.jar!/BO OT-INF/classes!/com/gcloud/cloud/adapter/config/WebMvcConfig.class]
3、读取类的相关信息。
根据第二步的URL可以定位到class文件在jar包中的位置,再把文件转成inputstream方式进行读取
4、根据类的自定义注解信息对类进行归类保存。
截止到第三步,所需要的类的Class对象candidate已经生成,可以在内存中保存该类的对象,后续的业务逻辑可以通过该对象获得更多的信息。
如通常我们可以使用自定义注解的方式定义业务上需要的信息,如下面的CommandAction注解代表在hwcloud执行挂载网卡AttachNetworkInterface操作。
@CommandAction(action=″AttachNetworkInterface″,platformType=″hwcloud″)public class AttachNetworkInterfaceCommand extendsHwcloudBaseCommand{}
使用反射出来的candidate对象获取注解等信息
内存中记录hwcloud中AttachNetworkInterface操作使用该
Claims (7)
1.一种基于ClassLoader的自定义类查找方法,其特征在于:所述的方法包括如下步骤:
步骤1:取得运行环境的ClassLoader;
步骤2:根据类路径查找类的URL;
步骤3:读取类的相关信息;
步骤4:根据类的自定义注解信息对类进行归类保存。
2.根据权利要求1所述的找方法,其特征在于:
所述的运行环境的ClassLoader,通常是程序运行当前线程的类加载器,若当前线程没有定义则使用系统的类加载器。
3.根据权利要求1所述的方法,其特征在于:所述的类路径是指识别一个类的基础路径,包括com/gcloud/cloud/adapter/xxx.class;
所述的类的URL是定位这个类在操作系统的文件路径或jar包中的路径,是资源的定位路径。
4.根据权利要求2所述的方法,其特征在于:所述的类路径是指识别一个类的基础路径,包括com/gcloud/cloud/adapter/xxx.class;
所述的类的URL是定位这个类在操作系统的文件路径或jar包中的路径,是资源的定位路径。
5.根据权利要求1至4任一项所述的方法,其特征在于:所述的类的相关信息主要是类的基础信息,包括类的名字,类的属性方法等信息。
6.根据权利要求1至4任一项所述的方法,其特征在于:所述的自定义注解是指用户根据系统业务需要定义的注解,能标记每个类在程序中的业务属性;
所述的对类进行归类保存,主要是根据业务属性的不同把相关信息保存在内存中,此内存信息作为全局的信息,能被系统所有逻辑引用。
7.根据权利要求5所述的方法,其特征在于:所述的自定义注解是指用户根据系统业务需要定义的注解,能标记每个类在程序中的业务属性;
所述的对类进行归类保存,主要是根据业务属性的不同把相关信息保存在内存中,此内存信息作为全局的信息,能被系统所有逻辑引用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710971621.8A CN107656775A (zh) | 2017-10-18 | 2017-10-18 | 一种基于ClassLoader的自定义类查找方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710971621.8A CN107656775A (zh) | 2017-10-18 | 2017-10-18 | 一种基于ClassLoader的自定义类查找方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107656775A true CN107656775A (zh) | 2018-02-02 |
Family
ID=61118929
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710971621.8A Withdrawn CN107656775A (zh) | 2017-10-18 | 2017-10-18 | 一种基于ClassLoader的自定义类查找方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107656775A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020063252A1 (zh) * | 2018-09-29 | 2020-04-02 | 京东数字科技控股有限公司 | 一种实现多版本依赖隔离的方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567033A (zh) * | 2010-12-14 | 2012-07-11 | 北京大学 | 基于嵌入式实时Java虚拟机的预先类加载方法及装置 |
CN105045642A (zh) * | 2015-08-31 | 2015-11-11 | 北京金山安全软件有限公司 | 一种自定义类的加载方法及装置 |
-
2017
- 2017-10-18 CN CN201710971621.8A patent/CN107656775A/zh not_active Withdrawn
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567033A (zh) * | 2010-12-14 | 2012-07-11 | 北京大学 | 基于嵌入式实时Java虚拟机的预先类加载方法及装置 |
CN105045642A (zh) * | 2015-08-31 | 2015-11-11 | 北京金山安全软件有限公司 | 一种自定义类的加载方法及装置 |
Non-Patent Citations (3)
Title |
---|
RAYMOND.CHEN: "自定义基于Spring的自动扫描器", 《HTTPS://CHENJUMIN.ITEYE.COM/BLOG/2292131》 * |
YUE2008: "PathMatchingResourcePatternResolver的使用", 《HTTPS://BLOG.CSDN.NET/YUE2008/ARTICLE/DETAILS/84793362》 * |
跳刀的兔子: "Spring自动加载指定路径规则的文件--PathMatchingResourcePatternResolver", 《HTTPS://WWW.CNBLOGS.COM/SHIPENGZHI/ARTICLES/3029867.HTML》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020063252A1 (zh) * | 2018-09-29 | 2020-04-02 | 京东数字科技控股有限公司 | 一种实现多版本依赖隔离的方法和装置 |
CN110968340A (zh) * | 2018-09-29 | 2020-04-07 | 京东数字科技控股有限公司 | 一种实现多版本依赖隔离的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109857917B (zh) | 面向威胁情报的安全知识图谱构建方法及系统 | |
CN111522994B (zh) | 用于生成信息的方法和装置 | |
CN109739994B (zh) | 一种基于参考文档的api知识图谱构建方法 | |
US20190129734A1 (en) | Data collection workflow extension | |
US7487174B2 (en) | Method for storing text annotations with associated type information in a structured data store | |
US20120233182A1 (en) | Method and system of adapting a data model to a user interface component | |
US20140164607A1 (en) | Dependency mapping among a system of servers, analytics and visualization thereof | |
CN102831057A (zh) | 一种用功能图分析软件功能变更及其影响的方法 | |
CN104778258A (zh) | 一种面向协议数据流的数据抽取方法 | |
Gemelli et al. | Doc2graph: a task agnostic document understanding framework based on graph neural networks | |
Sicilia et al. | AutoMap4OBDA: Automated generation of R2RML mappings for OBDA | |
CN105843867A (zh) | 基于元数据模型的检索方法和基于元数据模型的检索装置 | |
CN106202450A (zh) | 一种基于makefile文件依赖的源码分析方法 | |
CN107025263A (zh) | 用于数据库语句的语句解析方法 | |
CN107656775A (zh) | 一种基于ClassLoader的自定义类查找方法 | |
Cassani et al. | On the role of context in the design of mobile mashups | |
Usländer et al. | How to analyse user requirements for service-oriented environmental information systems | |
AU2016277656B2 (en) | Context-based retrieval and recommendation in the document cloud | |
Wu et al. | Recovering object-oriented framework for software product line reengineering | |
Cretella et al. | Towards automatic analysis of cloud vendors APIs for supporting cloud application portability | |
CN109118171A (zh) | 一种用于企业智能联网的方法和系统 | |
Harzenetter et al. | An Integrated Management System for Composed Applications Deployed by Different Deployment Automation Technologies | |
Jetlund | Improvements in Automated Derivation of owl ontologies from geospatial uml models | |
Adriana et al. | NoSQL 2: SQL to NoSQL Databases | |
Shapochka et al. | Practical Technical Debt Discovery by Matching Patterns in Assessment Graph |
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 | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20180202 |
|
WW01 | Invention patent application withdrawn after publication |