java URLClassLoader 載入外部jar包中的指定的類
使用場景:
最近在用spring aop做動態外掛的安裝,其中一個功能時從遠端URL下載所需的jar包,但是安裝外掛時需要把jar包 動態的載入到虛擬機器中,並把Advice class 新增到所攔截的service上。
1.1 URLClassLoader 介紹
URLClassLoader 是AppClassLoader和ExtClassLoader的父類,它既可以從本地 檔案系統獲取二進位制載入類,也可以從遠端主機獲取檔案來載入類。
1.2 URLClassLoader 方法
返回值 | 方法名 | 方法描述 |
---|---|---|
void | addURL(URL url) | 將指定的 URL 新增到 URL 列表中,以便搜尋類和資源。 |
URLClassLoader | newInstance(URL[] urls, ClassLoader parent) | 為指定的 URL 和父類載入器建立新 URLClassLoader 例項。 |
URLClassLoader | newInstance(URL[] urls) | 為指定的 URL 和預設的父類載入器建立新 URLClassLoader 例項。 |
URL[] | getURLs() | 返回用於載入類和資源的 URL 搜尋路徑。 |
Enumeration | findResources(String name) | 返回表示 URL 搜尋路徑中具有指定名稱的所有資源的 URL 列舉。 |
URL | findResource(String name) | 在 URL 搜尋路徑中查詢具有指定名稱的資源。 |
1.3 URLClassLoader 動態載入遠端jar的程式碼實現
// 將本地jar檔案載入至classloader
URLClassLoader loader = (URLClassLoader) this.getClass().getClassLoader();
URL targetUrl = jarFile.toURL();
boolean isLoader = false;
for (URL url : loader.getURLs()) {
if (url.equals(targetUrl)) {
isLoader = true;
break;
}
}
// 如果沒有載入
if (!isLoader) {
Method add = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class });
add.setAccessible(true);
add.invoke(loader, targetUrl);
}
相關文章
- IDEA如何匯入外部依賴的jar包IdeaJAR
- Eclipse下匯入外部jar包的最簡單方法EclipseJAR
- URLClassloader 載入本地方法
- Android小知識-如何載入外部dex檔案中的類Android
- 關於java中的類載入器Java
- Spring在不同的使用中需要匯入的jar包(轉載未完待續)SpringJAR
- Java中的包裝類Java
- java打jar包的maven方式JavaJARMaven
- 讀取 jar 包中巢狀的 jar 包內容的方法JAR巢狀
- 下載mysql的JDBC的jar包流程MySqlJDBCJAR
- linux 啟動jar包:在 Linux 上啟動 Java jar 包的方法LinuxJARJava
- java-jar啟動jar包JavaJAR
- java修改jar包JavaJAR
- java專案中的classpath和類載入器Java
- java 啟動檢視jar包載入順序並設定classpathJavaJAR
- java類的載入過程Java
- 一個Java類的載入Java
- tomcat7 與 tomcat8 載入 jar包的順序TomcatJAR
- idea maven update下載未下載好的jar包IdeaMavenJAR
- IDEA 匯入 ***.jar包IdeaJAR
- IDEA匯入jar包IdeaJAR
- Java Jar 包加密 -- XJarJavaJAR加密
- java中常用jar包JavaJAR
- springboot 執行 jar 包讀取外部配置檔案Spring BootJAR
- Java和ABAP裡的外部類和內部類Java
- 從Java的類載入機制談起:聊聊Java中如何實現熱部署(熱載入)Java熱部署
- [轉]androidstudio更改優先載入系統包framework.jar的順序AndroidFrameworkJAR
- crontab執行jar包時,Could not find or load main class(找不到或者載入不到主類)JARAI
- linux系統中怎麼中執行jar包?linux系統中執行jar包的方法LinuxJAR
- Java中atomic包中的原子操作類總結Java
- maven 工程匯入jar包MavenJAR
- java開發常用jar包JavaJAR
- jar包部署,jenkins整合javaJARJenkinsJava
- Springboot 獲取jar包中的檔案Spring BootJAR
- 搜尋下載jar包非常方便的網站JAR網站
- 一次性搞清Java中的類載入問題Java
- 《《《maven倉庫下載jar包MavenJAR
- IDEA如何自動匯入依賴的jar包IdeaJAR