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);
}
相關文章
- java中使用URLClassLoader訪問外部jar包的java類JavaJAR
- jar包中匯入新的類JAR
- Java 熱載入jar包JavaJAR
- IDEA如何匯入外部依賴的jar包IdeaJAR
- maven工程載入外部jar檔案的方法MavenJAR
- Eclipse下匯入外部jar包的最簡單方法EclipseJAR
- 使用Java擴充套件機制載入所有JAR包Java套件JAR
- 關於java中的類載入器Java
- Androidstudio中jar包重複或jar包裡的類重複問題AndroidJAR
- URLClassloader 載入本地方法
- Java中的包裝類Java
- Android小知識-如何載入外部dex檔案中的類Android
- 用URLClassLoader無法實現重新載入類,幫幫忙
- Spring在不同的使用中需要匯入的jar包(轉載未完待續)SpringJAR
- 如何程式讀入jar包中的任何檔案。JAR
- 讀取 jar 包中巢狀的 jar 包內容的方法JAR巢狀
- java打jar包的maven方式JavaJARMaven
- java專案中的classpath和類載入器Java
- 下載mysql的JDBC的jar包流程MySqlJDBCJAR
- Java學習--Java 中的包裝類Java
- 請教JBoss能不能動態載入外部jar庫JAR
- 一個Java類的載入Java
- java類的載入過程Java
- java 啟動檢視jar包載入順序並設定classpathJavaJAR
- java修改jar包JavaJAR
- java-jar啟動jar包JavaJAR
- 使用dubbo需要匯入的jar包JAR
- SSM框架各類jar包SSM框架JAR
- java類載入Java
- 不同的jar裡邊相同的包名類名怎麼區別匯入JAR
- 12c中匯入java的jar檔案JavaJAR
- 更改jar包中的一個classJAR
- Java Jar 包加密 -- XJarJavaJAR加密
- java中常用jar包JavaJAR
- java之生成jar包JavaJAR
- 使用struts,必需要匯入的jar包JAR
- linux 啟動jar包:在 Linux 上啟動 Java jar 包的方法LinuxJARJava
- 從Java的類載入機制談起:聊聊Java中如何實現熱部署(熱載入)Java熱部署