Java中不同类装入器的需求是什么
2022-09-03 18:37:05
我已经读到Java中有不同的类加载器,一个是原始类加载器,也有自定义类加载器,所以我想了解为什么原始类加载器不能在java中为所有类提供服务?为什么需要其他类装入器?
我已经读到Java中有不同的类加载器,一个是原始类加载器,也有自定义类加载器,所以我想了解为什么原始类加载器不能在java中为所有类提供服务?为什么需要其他类装入器?
主要需求是隔离。
假设一个页面上有 3 个小程序,每个小程序都使用不同版本的库 foo.jar。您希望这些小程序中的每一个都使用其自己的库版本运行,并确保它不会在另一个小程序的脚趾上行走。这要归功于不同的类装入器。
部署在单个容器上的 Web 应用程序也是如此。在未部署任何应用的情况下启动 Java 容器,然后部署应用。您希望容器能够从它启动时甚至不知道的位置加载类。如果部署了另一个 web 应用,则你希望另一个应用具有自己的类和库,这些类和库与第一个应用的类和库不同且隔离。
另一个需求是能够从不同的位置加载类:文件系统,还有URL,数据库或其他任何东西。
在很多实际情况下,您需要的功能超出了系统类装入器提供的功能:
最后一点特别强大(也是我使用它们的主要原因)。由于 Java 字节码是跨平台通用的,因此您可以使用它来检测任何系统上的类:测量调用了哪些方法,禁止安全关键调用,将 System.out 访问转移到您自己的自定义日志记录例程,或者执行高级动态 bug 测试例程。