为什么我们在java中需要用户定义的类加载器

为什么tomcat有自己的类加载器。 使用用户定义的类加载器有什么好处

它隔离了部署到容器中的各种Web应用程序; 也就是说,(un)部署另一个Web应用程序不会影响Web应用程序的行为。

每个webapp只能看到自己的类,而不是其他应用程序提供的类。 这允许不同的webapps使用同一类的不同版本。 如果没有这种隔离,部署多个Web应用程序将是一场噩梦。

类似地,OSGI包获得自己的类加载器,因此不同的包可以使用相同插件的不同版本。 同样,这种隔离使得添加插件(带有其依赖库)的可能性不大会影响系统中的其他插件。

Tomcat(和其他应用程序容器)需要能够处理来自WAR文件的加载类等。如果不使用用户定义的类加载器,您将如何做到这一点?

编辑:如果您需要以“不寻常”的方式加载类或资源,例如来自EAR或WAR文件,基本上您需要用户定义的类加载器。 作为另一个示例,您可以从数据库或某些安全存储加载类。

我曾经在一个系统上工作过一次,它有一个从分布式数据库加载类的类加载器。 这样你就可以修改代码,编译代码并让编译器将其转储到数据库中,然后重新启动系统的任何人都会立即加载它(这适用于管理员可以创建自己的屏幕的分布式客户端/服务器系统上的客户端)模块在运行中并将它们推送给客户端)。

顺便提一下这个问题,很棒的理论,但我不能推荐它。