Java ClassLoader委托模型的意思是:
当请求查找类或资源时,一个ClassLoader实例 会将对类或资源的搜索委托给其父类 加载程序,然后再尝试查找类或资源本身。
我看过question。通常,我们应该使用它。但我想知道更多。有什么充分的理由使我们不应该使用它?
答案 0 :(得分:3)
此处引用的answer of the linked question和Tomcat classloader documentation似乎提供了一个很好的用例:Tomcat等Web容器,它们运行隔离的Web应用程序。
您通常是希望使用委托模型来避免应用程序的不同部分使用不同的类加载器加载类,因为否则,类将被加载多次,但彼此之间将不兼容。这对于单个应用程序很有用-但是Web容器和应用程序服务器可以运行多个应用程序,而您实际上希望应用程序能够加载它们自己的某些类的版本。
例如,对于Tomcat,每个正在运行的Web应用程序可能使用一组不同的库或同一库的不同版本。有一些库的共享存储库应该可用于所有Web应用程序,并且每个Web应用程序都有一个特定于应用程序的存储库。
每个存储库都有自己的类加载器。这是Tomcat的类加载器树,顶部是父类加载器:
Bootstrap
|
System
|
Common
/ \
Webapp1 Webapp2 ...
特定于应用程序的存储库应具有优先权,因为它们可能包含共享库以外的其他库版本。