Spring使用雙親委派模型來實現類加載器。在Spring中,主要使用了兩種類加載器,分別是AppClassLoader和ExtClassLoader。
AppClassLoader是應用程序類加載器,它是ClassLoader類的子類,負責加載應用程序的類。當需要加載一個類時,AppClassLoader首先檢查自己是否已經加載過該類,如果沒有,它會委派給ExtClassLoader去嘗試加載。如果ExtClassLoader也沒有加載過該類,那么AppClassLoader就會嘗試從classpath中查找并加載該類。
ExtClassLoader是擴展類加載器,它也是ClassLoader類的子類,負責加載Java的擴展類庫。當需要加載一個類時,ExtClassLoader首先檢查自己是否已經加載過該類,如果沒有,它會委派給BootstrapClassLoader去嘗試加載。如果BootstrapClassLoader也沒有加載過該類,那么ExtClassLoader就會嘗試從JRE的擴展目錄中查找并加載該類。
BootstrapClassLoader是引導類加載器,它是JVM內置的類加載器,負責加載JVM自身需要的類。它是所有類加載器的根加載器,沒有父類加載器。當需要加載一個類時,BootstrapClassLoader會先嘗試從JVM內置的類庫中查找并加載該類。
以上就是Spring類加載器實現的基本原理。通過使用雙親委派模型,Spring可以保證類的加載順序和加載過程的一致性,避免了類的重復加載和沖突。同時,Spring還提供了自定義的類加載器,可以用于加載特定的類或資源,以滿足不同的需求。