打破双亲委派机制
打破双亲委派的三种方式:
- 自定义类加载器并且重写 LoadClass方法
- 利用上下文类加载器加载类,例如JDBC和JNDI等
- 使用Osgi框架的类加载器
自定义类加载器
- 一个Tomcat程序可以运行多个Web应用 , 如果这两个应用中出现了相同限定名的类 , 比如Servlet类 Tomcat要保证两个类都能加载 , 并且他们应该是不同的类
- 如果不大打破双亲委派机制 , 当应用类加载器加载Web应用1中的Servlet之后 , Web应用2中相同限定名的类就无法被加载了
- Tomcat使用了自定义类加载器来实现应用之间类的隔离 , 每个应用会有一个独立的类加载器加载对应的类
ClassLoader的原理
- ClassLoader中包含四个核心方法
- loadClass : 类加载器的入口,提供了双亲委派机制 , 内部会调用 findClas
- findClass : 由类加载器子类实现获取二进制数据 调用 defineClas
- defineClass : 做一些类名的校验 , 然后调用虚拟机底层的方法加载字节码信息
- resolveClass : 执行类生命周期的连接阶段
双亲委派核心代码阅读
思考: