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

为什么我们需要java中的用户定义类加载器,java,Java,为什么tomcat有自己的类加载器。拥有用户定义的类加载器的好处是什么?Tomcat(和其他应用程序容器)需要能够处理从WAR文件等加载类。如果不使用用户定义的类加载器,您将如何做到这一点 编辑:如果您需要以“不寻常”的方式加载类或资源,基本上您需要用户定义的类加载器。。。例如从EAR或WAR文件。另一个例子是,您可以从数据库或安全存储中加载类。我曾经在一个系统上工作过,该系统有一个从分布式数据库加载类的类加载器。通过这种方式,您可以修改代码,编译代码,并让编译器将其转储到DB,然后任何重新启动

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


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

我曾经在一个系统上工作过,该系统有一个从分布式数据库加载类的类加载器。通过这种方式,您可以修改代码,编译代码,并让编译器将其转储到DB,然后任何重新启动系统的人都可以立即加载代码(这适用于分布式客户机/服务器系统上的客户机,管理员可以动态创建自己的屏幕模块,并将其推送到客户机)


顺便说一句,这是一个很好的理论,但我不能推荐它。

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

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


类似地,OSGI捆绑包有自己的类加载器,因此不同的捆绑包可以使用同一插件的不同版本。同样,这种隔离使添加插件(及其依赖库)的可能性降低将影响系统中的其他插件。

询问他们为什么不能使用引导类加载器或系统classloader@SureshS:这两个程序中有谁知道如何处理WAR或EAR文件吗?作为另一个答案,我可能会提到,我非常确定,如果覆盖类加载器,您可以用代码完成一些令人印象深刻的元数据。它可以让你实现你自己的加密方案,并且应该能够实现一些aspect-j风格的技巧(例如,每次调用“Log”时都会标记它所记录的类/行号的名称。我没有把它作为一个“答案”,因为我没有做过这些事情,但我认为这是可能的。