为什么tomcat有自己的类加载器。使用用户定义的类加载器
的优点是什么?答案 0 :(得分:12)
它隔离了部署到容器中的各种Web应用程序;也就是说,(un)部署另一个Web应用程序不会影响Web应用程序的行为。
每个webapp只能看到自己的类,而不是其他应用程序提供的类。这允许不同的webapps使用同一类的不同版本。如果没有这种隔离,部署多个Web应用程序将是一场噩梦。
类似地,OSGI包获得自己的类加载器,因此不同的包可以使用相同插件的不同版本。同样,这种隔离使得添加插件(带有其依赖库)的可能性不会影响系统中的其他插件。
答案 1 :(得分:8)
Tomcat(和其他应用程序容器)需要能够处理来自WAR文件的加载类等。如果不使用用户定义的类加载器,您将如何做到这一点?
编辑:如果您需要以“不寻常”的方式加载类或资源,例如来自EAR或WAR文件,基本上您需要用户定义的类加载器。另一个例子是,您可以从数据库或某些安全存储中加载类。
答案 2 :(得分:3)
我曾经在一个系统上工作过一次,它有一个从分布式数据库加载类的类加载器。这样你就可以修改代码,编译代码并让编译器将其转储到数据库,然后重新启动系统的任何人都会立即加载它(这适用于分布式客户端/服务器系统上的客户端,管理员可以创建自己的屏幕即时模块并将它们推送给客户。)
顺便提一下,这个问题很棒,但是我不能推荐它。