91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring IOC容器為什么不使用Class.forName加載類

發布時間:2021-12-02 16:09:50 來源:億速云 閱讀:145 作者:柒染 欄目:云計算

Spring IOC容器為什么不使用Class.forName加載類,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

今天我們要學習的Spring IOC 容器為什么不使用 Class.forName 加載類,而是使用 ClassLoader!

Spring IOC容器為什么不使用Class.forName加載類

雖然 Class.forName() 和 ClassLoader 都可用來對類進行加載,但是它們還是有些區別的。為了說明它們,我們來看看 JVM 加載類的步驟是什么!

Spring IOC容器為什么不使用Class.forName加載類

Spring IOC容器為什么不使用Class.forName加載類

清楚上面這個之后,再要想搞明白 Spring Ioc中為什么使用 Classloader,而不是 Class.forName,還得從它們的區別說起。我們先來看看如果使用 Class.forName 會發生什么!

先創建一個測試類。

Spring IOC容器為什么不使用Class.forName加載類

上面的代碼中, Class.forName("com.xttblog.Xttblog") 的調用會觸發 Xttblog 的靜態代碼塊的執行, 而 ClassLoader.getSystemClassLoader().loadClass("com.xttblog.Xttblog") 并不會。

調用 Class.forName 其實相當于調用了 Class.forName(className, true, currentLoader), 這個方法的第二個參數表示是否需要初始化類。源碼中設置為 true, 因此 Class.forName 獲取到 Class 對象時, 會自動對類進行初始化的。并且 Class.forName 加載類的 ClassLoader 和調用 Class.forName 所在的類的 ClassLoader 相同。上面的代碼中, Class.forName("com.xttblog.Xttblog") 的調用會觸發 Xttblog 的靜態代碼塊的執行, 而 ClassLoader.getSystemClassLoader().loadClass("com.xttblog.Xttblog") 并不會。

我們知道 Spring 的 IOC 中有一個懶加載(延遲加載),如果你使用了 Class.forName,那么懶加載這個功能就無法實現了。Spring IoC 為了加快初始化速度,因此大量使用了延時加載技術。而使用 classloader 不需要執行類中的初始化代碼,可以加快加載速度,把類的初始化工作留到實際使用到這個類的時候。

所以,Spring IOC 容器并沒有采用 Class.forName 來加載類。

看完上述內容,你們掌握Spring IOC容器為什么不使用Class.forName加載類的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天门市| 阿拉善左旗| 柳江县| 休宁县| 筠连县| 四川省| 江门市| 通州市| 法库县| 龙陵县| 田阳县| 绥宁县| 延庆县| 澄迈县| 东明县| 潼关县| 大安市| 昆明市| 鄂伦春自治旗| 平顺县| 连江县| 吉隆县| 板桥市| 二连浩特市| 桃江县| 九龙县| 庆城县| 安顺市| 桓仁| 田东县| 宁海县| 阿城市| 涞水县| 吴桥县| 林周县| 贞丰县| 克什克腾旗| 九江市| 巩留县| 阳谷县| 五峰|