打破双亲委派机制

 
 

打破双亲委派的三种方式:

 
notion image
  1. 自定义类加载器并且重写 LoadClass方法
  1. 利用上下文类加载器加载类,例如JDBC和JNDI等
  1. 使用Osgi框架的类加载器
 
 

自定义类加载器

  • 一个Tomcat程序可以运行多个Web应用 , 如果这两个应用中出现了相同限定名的类 , 比如Servlet类 Tomcat要保证两个类都能加载 , 并且他们应该是不同的类
  • 如果不大打破双亲委派机制 , 当应用类加载器加载Web应用1中的Servlet之后 , Web应用2中相同限定名的类就无法被加载了
notion image
  • Tomcat使用了自定义类加载器来实现应用之间类的隔离 , 每个应用会有一个独立的类加载器加载对应的类
notion image

ClassLoader的原理

  • ClassLoader中包含四个核心方法
    • loadClass : 类加载器的入口,提供了双亲委派机制 , 内部会调用 findClas
    • findClass : 由类加载器子类实现获取二进制数据 调用 defineClas
    • defineClass : 做一些类名的校验 , 然后调用虚拟机底层的方法加载字节码信息
    • resolveClass : 执行类生命周期的连接阶段
notion image
 

双亲委派核心代码阅读

notion image
 
 

思考:

notion image
notion image
notion image