- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.载入器的
贝毅君 浙江大学软件学院 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. Java类载入器 Tomcat载入器 Loader接口 WebappLoader 类 创建类载入器 设置仓库 类的重新载入 WebappClassLoader 类 示例应用程序 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. JVM使用3种类载入器来载入所需要的类。 引导类载入器 – Bootstrap Class Loader (native方法实现) 扩展类载入器 – ExtClassLoader (Launcher类内部类) 系统类载入器 – AppClassLoader (Launcher类内部类) JAVA这3种类载入器之间是父子继承关系,其中引导类载入器位于层次结构的最上层,系统载入器位于层次结构最下层。 Java类加载器 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. Java类加载器 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 引导性类加载器用于启动Java虚拟机。当javax被执行的时候,就会启动引导类载入运行JVM所需要的类 - 启动引导类加载 System.getProperty(“sun.boot.class.path”)所指定的路径和jar 。本地代码实现该引导性加载器。 扩展性加载器负责载入标准扩展目录下的类。加载System.getProperty(“java.ext.dirs”)所指定的路径或jar。 系统类加载器是默认的类载入器,它会搜索环境变量CLASSPATH中指明的路径和JVM文件。加载System.getProperty(“java.class.path”)所指定的路径或jar。 Java类加载器 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 安全性 假如恶意用户编写一个名为java.lang.Object类,它可以访问硬盘中的任意目录。由于JVM 是信任java.lang.Object类的,这样这个类就可以绕过安全管理器了。 解决办法: JVM使用了类载入器的代理模型。当使用了代理模型,当一个类被载入的时候,会将载入类的任务交给其父载入类,然后父载入类(扩展类载入器)将载入任务交给其父载入器(引导类载入器)。引导类载入首先查找载入类,存在则载入,不存在交给扩展载入器载入,扩展载入器找不到再交给系统载入器查找。如果最终都找不到则抛出异常。 Java类加载器 安全管理器让java代码访问外部资源的时候收到一层过滤。可以在java应用启动的时候指定安全策略。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. private void test() { ClassLoader currentLoader = this.getClass().getClassLoader(); System.out.println(当前加载器: + currentLoader.getClass().getName()); ClassLoader currentLoaderClassLoader = currentLoader.getClass().getClassLoader(); if (currentLoaderClassLoader == null){ System.err.println(当前加载器的类加载器不存在); System.out.println(); } System.out.printl
文档评论(0)