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

溫馨提示×

溫馨提示×

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

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

Javaweb-類加載器-類加載器的了解入門

發布時間:2020-05-25 19:27:41 來源:網絡 閱讀:294 作者:凱哥Java 欄目:編程語言

Javaweb-類加載器-類加載器的了解入門


前面的動態代理學完了,以后在學習Spring的時候會用到這些動態代理的知識和原理,像目標對象,增強這兩個術語,會經常聽到。學習動態代理,就是學習JDK中反射包下的一個Proxy類,具體來說,我們只是學習newProxyInstance(ClassLoader, interfaces, hander)這個方法。這篇開始來學習下,加載器,我們在學習獲取動態代理,第一個要準備的參數就是,類加載器,通過這篇的學習,稍微對類加載器有入門的了解。

來源:凱哥Java(kaigejava)

什么是類加載器(作用)

就是把計算機本地磁盤上的.class文件加載進JVM內存中方法區,變成Class對象,實現這個過程的對象就是類加載器,這個類加載器本身也是一個類。

如何得到類加載器

前面我們學習動態代理的時候,是通過當前類來獲取類加載器,就是下面這行代碼。

ClassLoader?loader?=?this.getClass().getClassLoader();

這個getClassLoader()方法是在Class類中定義的方法。

類加載器的分類

類加載器有三個分類,以下三類分工明確,負責不同的類加載。

引導類加載器

這個分類主要是類庫加載,例如jre下面的lib文件夾中的rt.jar中類加載進JVM內存。

擴展類加載器

這部分就是把擴展的類庫加載到內存,例如jre下面的ext文件夾下的全部文件,ext就是英文擴展單詞的前綴縮寫。

系統類加載器

這分類就是加載一些應用下的類,例如我們寫一個web項目,我們使用到很多其他第三方的jar包,這些類就是系統類加載器來完成加載。還有我們自己寫的代碼文件,也是系統類加載器完成這操作。

這三個分類的關系是,系統類加載器的上層是擴展類加載器,擴展類加載器的上層是引導類加載器,引導類加載器是老大,沒有上層。

Javaweb-類加載器-類加載器的了解入門


類加載器的委托機制

由于上面三個類加載器分類的關系,產生了一個概念,叫類加載器的委托機制。先來看看下面這個過程,然后解釋什么是委托機制。

一開始,我們在代碼中寫這行代碼new A(); 由于A類可能是JDK自帶,也可能是程序員自己寫的,這個類在加載進內存需要經歷下面這個過程。

1)?系統類加載器發現自己要加載A類,因為這是在應用下的代碼,理應系統類加載器去處理加載。

2)?系統類加載器,根本不看這個A類是不是在自己管轄范圍,直接通知擴展類加載器,想讓擴展加載器去加載A類。

3)?擴展加載類也不管,直接通知引導加載類,想讓引導加載類去執行加載。

4)?引導加載類發現這個A類是rt.jar中的類,然后就加載到JVM內存的方法區,把這個Class對象返回給了擴展,然后擴展把這個對象Class對象返回給系統加載類,加載過程結束。

5)?如果引導加載器發現A類不是自己管轄范圍,返回null給擴展。

6)?擴展類加載器發現上層返回null, 只好擴展去自己管轄范圍查找,查找到了,就加載進入內存,返回對應class對象給系統加載器,加載過程結束。

7)?如果擴展器沒有找到A類,就返回null給系統類加載器。

8)?系統類加載器發現上層返回null,只好去自己管轄范圍查找A類,找到了就加載進JVM內存,返回class對象,加載過程結束。

9)?如果系統類也找不到這個A類,拋出異常,ClassNotFoundException

這個過程就是委托機制,所有加載任務都優先交給自己的上層去完成,上層完成不了然后才自己處理,這樣就包裝了類加載的安全,不會同時存在,三個類型加載器同時加載一個類的情況。

在實際的類解析過程中,類的加載還是要看線程,每一個線程就有自己的類加載器。所以本篇的類加載器的基礎,有助于我們以后學習多線程并發和JVM這塊的知識點。

l聯系凱哥:凱哥Java(kaigejava)或凱哥個人博客:www.kaigejava.com(凱哥個人博客可以發即時消息給凱哥哦~)

Tomcat中的類加載器

Javaweb-類加載器-類加載器的了解入門

簡單來了解下Tomcat中的類加載器,在Tomcat中有兩種類加載器。

1)?服務器類加載器,負責加載tomcat下${CATALINA_HOME}\lib下的類,也就是tomcat安裝目錄下lib文件夾中的類。

2)?應用類加載器,這個主要加載當前web項目下\WEB-INF\lib?\WEB-INF\classes,?就是我們程序員代碼編譯之后文件在\WEB-INF\classes,一些第三方jar包在\WEB-INF\lib

說一下這種類加載器和前面知道的三個類加載器的區別和關系。在Tomcat下兩種類加載器都排下上面系統類加載器的下面,這兩個的上層都是系統類加載器。在Tomcat中的兩種類加載器有一個共同特性:先自己動手,然后去委托。通過前面的委托機制的學習,應該知道這句話的含義。Tomcat中兩種類加載器會自己一開始就去自己管轄范圍查找和加載類,如果沒有找到才去委托給系統類加載器。


向AI問一下細節

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

AI

扎兰屯市| 容城县| 白朗县| 舞钢市| 如皋市| 老河口市| 盱眙县| 扎囊县| 济南市| 彰化县| 广宁县| 柯坪县| 福清市| 辰溪县| 瑞丽市| 沙河市| 嘉荫县| 夏津县| 奉贤区| 克什克腾旗| 嵩明县| 永宁县| 华宁县| 咸阳市| 攀枝花市| 老河口市| 香港| 平泉县| 贡嘎县| 长寿区| 高淳县| 金华市| 澳门| 新野县| 夏河县| 夹江县| 镇原县| 长治市| 寿光市| 潼关县| 库尔勒市|