[发明专利]一种自定义类的加载方法及装置有效
申请号: | 201510548994.5 | 申请日: | 2015-08-31 |
公开(公告)号: | CN105045642B | 公开(公告)日: | 2018-09-25 |
发明(设计)人: | 孙文鸿 | 申请(专利权)人: | 北京金山安全软件有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445 |
代理公司: | 北京市广友专利事务所有限责任公司 11237 | 代理人: | 祁献民 |
地址: | 100085 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 自定义 加载 方法 装置 | ||
本发明的实施例公开一种自定义类的加载方法及装置。方法包括:接收第一自定义类的加载请求,获取所述第一自定义类的类加载器链;在获取的所述类加载器链中,查找到加载所述第二自定义类的类加载器;提取所述第二自定义类的类加载器中预先设置的加载目录,并将提取的加载目录添加到所述类加载器链中用于加载所述第一自定义类的类加载器的加载路径中;删除所述类加载器链中除所述第一自定义类的类加载器之外的自定义类加载器,得到更新的类加载器链;按照所述更新的类加载器链加载所述第一自定义类。应用本发明,可以有效扩展组件中自定义类功能。
技术领域
本发明涉及计算机通信技术,尤其涉及一种自定义类的加载方法及装置。
背景技术
java应用程序是一种可以撰写跨平台应用软件的面向对象的程序设计语言。类是java应用程序的组织单位,任何的java语句,都要写在类文件中。java继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
类加载器(classloader)是java中的加载器,其本身也是一个java类,包括应用程序classloader以及组件classloader。当java应用程序需要加载某一类时,需要通过classloader将待加载类的二进制信息加载至内存中。classloader拥有委托机制,除了根classloader,每一classloader都会拥有自己的父级classloader。因而,当每一classloader加载类时,会先将加载该类的任务委托给父级classloader,父级classloader再委托给上一父级,直至委托给根classloader。
假定oriClassLoader的父级classloader是classLoader1;
classLoader1的父级clasloader是classLoader2;
classLoader2的父级classloader是classLoader3;
classLoader3为根classLoader,没有父级classLoader。
当oriclassloader根据委托机制加载具有继承关系的A类时:
oriClassLoader直接将加载A类的任务依次通过classLoader1以及classLoader2传达至classLoader3,classLoader3接收加载A类的任务后,由于没有父级classLoader,则在加载任务列表中查找是否包含A类,如果找到,加载A类并返回加载结果,如果未找到,将加载A类的任务再回传至classLoader2,classLoader2,classLoader1进行同样的处理,直至oriClassLoader接收加载A类的任务后,查找A类,如果找到,加载A类并返回加载结果,如果未找到,抛出异常,表示加载A类失败。
在加载A类完成之后,发现A类拥有父类或者实现java接口(继承一个父类或者实现一个java接口),根据与加载A类相似的委托机制,oriClassLoader相应尝试去加载A类的父类或者java接口,其中,父类与java接口也是类,如果加载A类的父类或者java接口成功,则对加载的父类或者java接口进行校验,即校验加载出的具有继承关系的两个自定义类是否属于不同的文件类型,如果是,则抛出加载错误,如果是,加载组件中的A类成功。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京金山安全软件有限公司,未经北京金山安全软件有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510548994.5/2.html,转载请声明来源钻瓜专利网。