2010-08-23 80 views
6

为什么tomcat有它自己的类加载器。什么是具有用户定义的类装载器为什么我们需要java中的用户定义类加载器

+0

作为另一个答案,我可能会提到,我非常确定,如果覆盖类加载器,则可以使用代码执行一些非常令人印象深刻的元代码。它可以让你实现你自己的加密方案,并且应该能够做一些aspect-j风格的技巧(例如,每次调用“Log”时都标记它从中注册的类/行号的名称。让它成为“答案”,因为我没有做过这些东西,但我认为这是可能的。 – 2010-08-23 19:01:02

回答

12

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

每个web应用程序只能看到自己的班,而不是那些由其他应用程序提供。这允许不同的webapps使用同一个类的不同版本。部署几个Web应用程序将是没有隔离的恶梦。

同样,OSGI束获得自己的类加载器,以便不同的包可以使用不同版本的同一插件。同样,这种隔离使得添加插件(使用其依赖库)不太可能影响系统中的其他插件。

8

Tomcat的(和其他应用程序容器)的优势,必须能够从WAR文件等处理加载类,你会如何能够做到这一点,而无需使用用户定义的类装载器?

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

+2

为什么他们不能使用引导类加载器或系统类加载器 – 2010-08-23 17:56:26

+1

@Suresh S:那些知道如何处理WAR或EAR文件的人? – 2010-08-23 18:13:53

+0

双方感谢从数据库加载breif答案。 – 2010-08-24 16:54:28

3

我工作的系统上一旦有这样的加载从分布式数据库类类加载器。这样你就可以修改你的代码,编译它并让编译器把它转储到数据库中,然后任何重启系统的人都会立即加载它(这是为分布式客户/服务器系统上的客户端提供的,管理员可以创建他们自己的屏幕模块,并将它们推送给客户端)。

这有问题,顺便说一下,伟大理论,但我不能建议。

相关问题