最近我在接受采访时询问了加载类时调用类加载器的顺序.
不幸的是,我从来没有必要编写自己的类加载器,因此当时不熟悉类加载的复杂性.
这让我想知道,他们编写自己的类加载器的原因是什么.
所以这就是我的问题:人们面临哪些场景需要编写自己的类加载器?
我目前正在开发一个高度模块化的超大型应用程序,即它包含数百个JAR文件.这意味着类路径字符串变得庞大,在各种各样的地方引起各种各样的问题,因为各种开发工具无法处理5KB类路径字符串.这是通过编写从文件中读取其类路径的自定义类加载器来解决的.
典型的原因是您的应用程序正在托管其他应用程序,这些应用程序在同一运行时(例如Tomcat)中使用不同版本的相同库.因此,您必须确保您的类加载器可以为每个应用程序提供相同类的不同版本.
编辑:
稍微澄清一点(参见评论中的混淆):当说"你的类加载器"时,我指的是"一个实现java.lang.ClassLoader
"而不是这样一个类的实例.实际上它是你的类加载器的两个含义:Tomcat人实现了不同的ClassLoader
类,并且在运行时有更多的实例...有关详细信息,请参阅相应的文档.
无聊以及在他们不得不维护我的代码时折磨我的同事的愿望.:)