ClassLoader 双亲委派
一个程序有一个默认的appClassLoader。类不是由被调用者也不是被自身加载的,正常情况下是被默认的AppClassLoader加载的。
System.out.println(test3.class.getClassLoader());
System.out.println(test4.class.getClassLoader());
System.out.println(test5.class.getClassLoader()); ClassLoader appClassLoader = ClassLoader.getSystemClassLoader();
System.out.println("the appClassLoader : " + appClassLoader);

appClassLoader是同一个对象。
类总是由appClassLoader的父类的父类加载,如果加载失败由父类加载,如果再失败由它本身加载,也就是双亲加载机制。这是有一定的目的的。
appClassLoader的父类的父类,即BootstrapClassLoader(启动类加载器),只加载某些路径下的类。
appClassLoader的父类,ExtClassLoader (标准扩展类加载器),也只加载某些路径下的类。
appClassLoader,系统类加载器,也只加载某些路径下的类。这个路径就是class path配的地址。这些路径下不能保证类只出现一次,以我测试看,是先找到哪个就加载哪个。
网上的好多文章都缺点什么,让人更晕。classloader,双亲委派知识的关键是一个程序只有一个appClassLoader,类基本上都是由它加载的。
****************************************
tomcat实现了自定义的classloader来实现不同webapp的隔离。
System.out.println(test.class.getClassLoader());
System.out.println(this);
ClassLoader appClassLoader = ClassLoader.getSystemClassLoader();
System.out.println("the appClassLoader : " + appClassLoader);

在不同的webapp里,classloader不一样,servlet对象也不一样。
通过这些知识也得出自己的webapp的类库放在自己webapp的lib库里比较合理,不要放到tomcat的类库中,classpath变量也慎用,classpath的值在catlinet.bat中会被初始化。

ClassLoader 双亲委派的更多相关文章
- java安全沙箱(一)之ClassLoader双亲委派机制
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...
- ClassLoader&双亲委派&类初始化过程
1.class sycle 类加载的生命周期:加载(Loading)–>验证(Verification)–>准备(Preparation)–>解析(Resolution)–>初 ...
- 【Java_基础】java类加载过程与双亲委派机制
1.类的加载.连接和初始化 当程序使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化三个步骤来对类进行初始化.如果没有意外,jvm将会连续完成这三个步骤,有时也把这三个步骤统称为 ...
- 【java基础】- java双亲委派机制
在了解双亲委派机制之前,你应当知道classloader(如果不了解,可以现在去恶补一下哈) 四种classloader 虚拟机自带 引导类加载器(Bootstrap ClassLoader) 扩展类 ...
- java双亲委派模型
Java类加载器(ClassLoader) 双亲委派模式要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器,请注意双亲委派模式中的父子关系并非通常所说的类继承关系,而是采用组合关系来 ...
- 创建自定义ClassLoader,绕过双亲委派
1.什么是类加载 通过javac将.java文件编译成.class字节码文件后,则需要将.class加载到JVM中运行,哪么是谁将.class加载到JVM的呢?那就是类加载器啦. 2.类加载器类型 B ...
- JVM加载类的过程,双亲委派机制中的方法
JVM加载类的过程: 1)JVM中类的整个生命周期: 加载=>验证=>准备=>解析=>初始化=>使用=>卸载 1.1.加载 类的加载阶段,主要是获取定义此类的二进 ...
- 深入JVM系列(三)之类加载、类加载器、双亲委派机制与常见问题
一.概述 定义:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型.类加载和连接的过程都是在运行期间完成的. 二. 类的 ...
- 关于Java类加载双亲委派机制的思考(附一道面试题)
预定义类加载器和双亲委派机制 JVM预定义的三种类型类加载器: 启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib下面 ...
- java双亲委派模型如何递归实现
以下是Classloader的中最重要的方法,也就是所谓的双亲委派模型.这个模型第一次在周志明的书上看到,当时看了只知道是类加载过程是首先是委托给父加载器,否则父不能加载,则自己加载,整个过程实则是一 ...
随机推荐
- C++ 手动实现单向循环链表(课后作业版)
单向循环链表,并实现增删查改等功能 首先定义节点类,类成员包含当前节点的值, 指向下一个节点的指针 循环链表的尾节点指向头节点 节点定义: //node definition template < ...
- Http方式发送Soap报文调用WebService
WebService的实现方式之一就是基于HTTP发送SOAP报文进行调用. 可能由于各种原因,我们不能使用CXF.AXIS等框架调用,此时的解决方案之一就是直接基于HTTP发送SOAP报文,然后将响 ...
- E. Permutation Game
https://codeforces.com/contest/1772/problem/E 题目大意就是给一个1~n的全排序列,所有数字都是红色的,两人轮流操作,操作有三种选择,第一是将所有蓝色的数字 ...
- js-模态框的拖动
效果如下: 代码如下: <div class="clickBtn">点击,弹出登录框</div> <div class="login&quo ...
- CSS3-animation实现走马灯效果
动画animation 1.先定义动画: @keyframes 动画名称( from{} to{} ) 或者 @keyframes 动画名称( 0%{} 50%{} 100%{} ) 百分号指的是动画 ...
- Taro 弹窗阻止小程序滑动穿透(亲测有效) tabbar数据缓存不更新 入口场景值不同
v3.0 推出后反馈最多的问题之一,就是在 touchmove 事件回调中调用 e.stopPropagation() 并不能阻止滑动穿透. 这是因为 Taro 3 的事件冒泡机制是单独在小程序逻辑层 ...
- 百度地图api高亮显示指定区域,其余遮罩
先放一张最后的效果图 主要功能:只显示天府新区(双流区+龙泉驿区)这一块,其他的地方就用半透明的遮罩层盖住,然后用Markers标注出每个项目的所在地点,当鼠标悬浮在标注点的时候就显示出项目名称. h ...
- springboot修改默认端口
方案一: src/main/resuorces 文件夹下新建application.properties 文件 并添加内容server.port=8011即可 方案二: 使用EmbeddedServl ...
- SpringBoot测试类注入Bean失败原因
首先针对SpringBoot的测试类,2.2版本之前和2.2版本之后是不一样的,在2.2版本之前需要贴注解@SpringBootTest和@RunWith(SpringRunner.class)需要在 ...
- 网易-java线程的interrupt
java线程的interrupt方法初一接触的时候,会和过去各种面向过程语言线程中断线程的方法有点不一样. java里不提倡直接将线程kill掉,实际上如果想直接kill线程可以用stop方法 可以看 ...