Question
引自《深入理解Java虛擬機—JVM高級特性與最佳實踐》9.2.1,p235
如果有10個WEB應用程序都是用spring來進行組織管理的話,可以把Spring放到Common或Shared目錄下(Tomcat5.0)讓這些程序共享。Spring要對用戶程序的類進行管理,自然要能訪問到用戶程序的類,而用戶程序顯然是放在/WEB-INF目錄中的。那么被
object 就是調用者,假設它所在類A的ClassLoader是User-defined ClassLoaderA,那么它在doing里面裝載B類使用的ClassLoader就是默User-defined ClassLoaderA。我們再假設A只能被User-defined ClassLoaderA裝載,B只能被User-defined ClassLoaderB裝載,如下圖關系:
那么可以看出按照雙親委派模型,object 所在的A類是無法加載B類的,因為模型的特點就是只能向上加載不能向下。回到我們的問題:Spring就好像類A,用戶程序就好像類B,那么Spring如何加載用戶程序的類呢?實際上在《深入理解Java虛擬機—JVM高級特性與最佳實踐》7.4.3,p195,里面已經說了,使用上下文類加載器就可以實現“向下加載”。