双亲委派

102 阅读1分钟

Java中的类加载器主要分为以下四类:

  1. 启动类加载器(BootStrap ClassLoader) , 主要负责加载jre/lib/rt.jar相关的字节码文件的
  2. 扩展类加载器(Extension ClassLoader) ,主要负载加载 jre/lib/ext/*.jar 这些jar包的。
  3. 应用程序类加载器(Application ClassLoader) , 主要负责加载用户自定义的类以及classpath环境变量所配置的jar包的。
  4. 自定义类加载器(UserClassLoader) , 负责加载程序员指定的特殊目录下的字节码文件的。大多数情况下,自定义类加载器只需要继承ClassLoader这个抽象类,重写findClass()和loadClass()两个方法即可。 双亲委派机制的原理
  5. 如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行。
  6. 如果父类的加载器还存在其父类加载器,则进一步向上委托,依次递归请求最终达到顶层的启动类加载器
  7. 如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派机制。 优点
  8. 避免类的重复加载
  9. 保护程序安全,防止核心API被随意篡改 缺点
  • 在某些场景下双亲委派制过于局限,所以有时候必须打破双亲委派机制来达到目的。例如:SPI机制