日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

此计算机必须为委派而被信任_如何增强 ClassLoader 双亲委派模式 ?

發布時間:2023/12/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 此计算机必须为委派而被信任_如何增强 ClassLoader 双亲委派模式 ? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

雙親委派模式

JVM加載類的實現方式,我們稱為 雙親委托模型: 如果一個類加載器收到了類加載的請求,他首先不會自己去嘗試加載這個類,而是把這個請求委托給自己的父加載器,每一層的類加載器都是如此,因此所有的類加載請求最終都應該傳送到頂層的Bootstrap ClassLoader中,只有當父加載器反饋自己無法完成加載請求時,子加載器才會嘗試自己加載。

雙親委派模式問題

雙親委派模式存在的問題就是不太靈活,和類的繼承類似,只能繼承一個類。一個 classloader 只能有一個父親 classloader。 比如有如下的場景,我們需要加載 N 個 插件,這些插件使用自己的classloader來保證類的隔離。應用可以使用插件classloader 加載的類。其結構如下:

這樣的問題就是 Plug-in 之間是從上往下是繼承的關系,但是每一個 plug-in 對于 App 而言應該是同級別的關系 ,plug-in 之間應該可以相互依賴。 以上的模式顯然是無法做到的。

雙親委派增強模式

雙親委派增強模式滿足以下內容:

  • Plugin Class loader 加載的 jar 都是隔離的,每一個jar 使用 一個 Plugin classloader 進行加載。
  • 每一個 Plugin Class Loader 實例與其它的 實例 互為 雙親委派模式。 plugin 1 可以使用 2、3 加載的class,同理 2 也可以 1、2 加載的class。
  • AppClassLoader 可以引用 所有 plugin classloader 加載的 class。但是 plugin classloder 不能使用 AppClassloader加載的class,為單向雙親委派模式。

Plugin 如何隔離?

plugin 隔離比較簡單,只要使用不同的 Plugin classloader 實例進行加載就可以隔離。

Plugin 如何互為雙親委派?

每一個 pluginclassloader實例 指定加載自己的jar,并且每一個 pluginclassloader實例 可以獲取到其他的pluginclassloader實例,在加載class的時候遍歷所有的其它的classloader,如果加載成功加載完成,如果沒有加載成功,自己再進行加載。這樣就形成了所有 plugin 互為雙親委派模式。

fat jar 如何避免plugin的依賴被其他pluginclassloader加載?

當前打包的方式很多都是 fat jar 方式,自己的依賴 jar 也會打進自己的jar中,如果兩個 plugin 分別依賴了 a-0.1jar 和 a-0.2.jar 。 如果按照上面的加載方式,plug-in-1 classloader 可能會加載到 a-0.2.jar 中的class。這樣就出現了問題。

比較簡單處理方式,在打包的時候可以把class 文件名稱記錄在 MANIFEST.MF 中,依賴 jar 不進行記錄 ,這樣每一個plugin classloader 對應加載的那些類就可以解析出來。

plug-in-1 classloader 加載class 過程如下:

  • 識別這個class 在 其它的 classloader 中是否支持加載,判斷的依據就是 classloader 解析的 class記錄是否存在此class ,如果存在就使用其他的 plug-in classloader 進行加載。否則自己進行加載。

因為依賴jar中 class 沒有進行記錄,所以一直會使用自己的classloader進行加載。

參考 SOFA-ark 的classloader 模塊 PluginClassLoader.java

總結

以上是生活随笔為你收集整理的此计算机必须为委派而被信任_如何增强 ClassLoader 双亲委派模式 ?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。