3

如果我有一个自定义类加载器,而不是首先委托给它的父类,而是尝试搜索和加载类本身,这是否违反了某些已声明/未声明的规则?

4

1 回答 1

4

Tomcat webapp 类加载器遵循这个模型,所以我想它至少在某种程度上可以工作:)来自Tomcat 类加载器文档

如上所述,Web 应用程序类加载器不同于默认的 Java 2 委托模型(根据 Servlet 规范,版本 2.4,第 9.7.2 节 Web 应用程序类加载器中的建议)。当处理从 Web 应用程序的 WebappX 类加载器加载类的请求时,该类加载器将首先在本地存储库中查找,而不是在查找之前进行委托。也有例外。作为 JRE 基类的一部分的类不能被覆盖。对于某些类(例如 J2SE 1.4+ 中的 XML 解析器组件),可以使用 J2SE 1.4 认可的特性。最后,任何包含 Servlet API 类的 JAR 文件都将被类加载器显式忽略——不要在您的 Web 应用程序中包含此类 JAR。Tomcat 6 中的所有其他类加载器都遵循通常的委托模式。

在我看来,您在执行此操作之前应该非常谨慎,但在某些情况下,如果小心使用它可能会很有用。您应该彻底记录它(特别是如果第三方开发人员会看到)并确保包含足够的日志记录/诊断以帮助解决棘手的问题。

于 2012-05-22T11:48:07.810 回答