码上敲享录 > java面试题及答案大全 > 思考Tomcat 类加载器为什么要违背双亲委派模型?

思考Tomcat 类加载器为什么要违背双亲委派模型?

上一章章节目录下一章 2023-07-12已有291人阅读 评论(0)

Tomcat的类加载器在一定程度上违背了Java的标准双亲委派模型,这是由于以下几个原因:


1. 灵活性和可插拔性:Tomcat作为一个Java Web服务器,需要支持部署和运行各种不同的Web应用程序。每个Web应用程序可能包含自己的类库和依赖项,并且可能需要使用特定版本的库。如果完全遵循标准的双亲委派模型,所有应用程序都将共享同一个类加载器层次结构,这会导致类版本冲突和依赖冲突。


2. 热部署和热加载:Tomcat支持动态的热部署和热加载,即可以在运行时添加、删除或替换Web应用程序。在标准的双亲委派模型下,重新加载一个已经存在的类会遇到问题,因为父加载器加载的类将会被优先使用,而不会再重新加载更新后的类。


3. 内部库和共享库:Tomcat本身有一些内置的库和共享的库,这些库需要在所有应用程序之间共享。如果完全遵循标准的双亲委派模型,这些共享库需要被放置在父类加载器的类路径下,从而导致所有应用程序都能够访问到,这可能不符合实际需求。


为了解决上述问题,Tomcat采取了一种被称为"类加载器链"的机制。该机制使用了自定义的类加载器,在标准的双亲委派模型基础上进行了一些变形和扩展。Tomcat的类加载器链可以为每个Web应用程序创建一个独立的类加载器实例,使得每个应用程序拥有自己的类加载器层次结构,并且可以独立管理自己的类库和依赖项。这样可以有效避免类冲突和版本问题,并且可以实现独立的热部署和热加载。


尽管Tomcat的类加载器违背了标准的双亲委派模型,但它在实际中解决了很多问题,并保证了Web应用程序的灵活性和可插拔性。然而,这也需要开发人员在编写应用程序时遵循一些最佳实践,以避免类加载器的混乱和潜在的问题。


0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交