2012-05-22 48 views
3

如果我有一個自定義類加載器,而不是首先委託給它的父代,嘗試搜索和加載類本身會違反一些聲明/未聲明的規則?Java Classloader委託模型是強制性的嗎?

+0

據我所知,它會被放棄,但讓我們聽聽人們說什麼:) –

+1

閱讀所有關於它[源](http://docs.oracle.com/javase/specs/jvms/ SE7/HTML/JVM中-5.html#的JVM-5.3)。允許不委派。 –

回答

3

Tomcat的web應用程序的類加載器遵循這種模式,所以我想它的工作原理至少一些程度:)從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中的所有其他類加載器都遵循通常的代理模式。

這聽起來像你對我做這個之前,你應該是非常謹慎的,但在某些情況下,如果小心使用,它可以是有用的。您應該對其進行全面記錄(特別是如果第三方開發人員會看到這一點),並確保包含足夠的日誌/診斷來幫助解決棘手的問題。

+0

:)明白了!多謝你們!! – meer