如果我有一个自定义类加载器,而不是首先委托给它的父级,那么尝试搜索并加载该类本身会违反某些声明/未声明的规则吗?
答案 0 :(得分:4)
Tomcat webapp类加载器遵循此模型,因此我认为它至少可以某些范围:)来自the Tomcat classloader documentation:
如上所述,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中的所有其他类加载器都遵循通常的委托模式。
听起来我觉得你在做这件事之前应该非常谨慎,但在某些情况下,如果仔细使用,它可以有用。您应该对其进行彻底记录(特别是如果第三方开发人员会看到这一点),并确保包含足够的日志记录/诊断程序以帮助解决棘手的问题。