Java 类加载器中的委派(Delegation)指的是,当一个类加载器收到加载类的请求时,它会首先将这个请求委派给它的父类加载器去加载。如果父类加载器无法找到该类,则子类加载器会尝试加载这个类。

'委派模型' 的目的是为了保证 Java 类的安全性和一致性。通过将类加载请求委托给父类加载器,可以确保被加载的类只有一个版本,并且不会被重复加载。这样可以避免类的重复定义和冲突。

Java 类加载器采用了'双亲委派模型',其中有三个类加载器:启动类加载器(Bootstrap Class Loader)、扩展类加载器(Extension Class Loader)和应用程序类加载器(Application Class Loader)。

  • 启动类加载器是最顶层的类加载器,它负责加载 Java 的核心类库,如 java.lang 包下的类。
  • 扩展类加载器负责加载 Java 的扩展类库,如 javax 包下的类。
  • 应用程序类加载器则负责加载应用程序的类。

当一个类加载器收到加载类的请求时,它会先询问父类加载器是否已经加载了该类。如果父类加载器已经加载了该类,则直接返回该类的 Class 对象。如果父类加载器没有加载该类,则子类加载器会尝试加载这个类。如果子类加载器无法加载该类,则会继续委派给父类加载器的父类加载器,直到达到顶层的启动类加载器。如果所有的父类加载器都无法加载该类,则会抛出 ClassNotFoundException 异常。

通过委派模型,Java 类加载器可以实现类的共享和隔离。

  • 共享是因为父类加载器加载过的类可以被所有子类加载器所访问。
  • 隔离是因为每个类加载器都有自己的命名空间,不同类加载器加载的同名类之间是互相隔离的。这样可以避免不同类加载器加载的类之间的冲突。
Java 类加载器委派机制详解:原理、模型及应用

原文地址: https://www.cveoy.top/t/topic/o6mM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录