亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

全南县| 潜山县| 木里| 南城县| 分宜县| 南通市| 阜新市| 玉树县| 纳雍县| 繁峙县| 固始县| 泽库县| 三门县| 菏泽市| 梓潼县| 阿合奇县| 临江市| 清水河县| 文登市| 天长市| 瑞安市| 滦平县| 西乌| 沾益县| 察雅县| 桂阳县| 仙居县| 台南县| 许昌市| 呼和浩特市| 鹤庆县| 吉安市| 宁陕县| 南汇区| 汨罗市| 乐亭县| 洪江市| 九龙坡区| 太仆寺旗| 昌邑市| 靖远县|