溫馨提示×

溫馨提示×

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

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

Java使用Class.forName加載外部Jar類文件的問題怎么解決

發布時間:2022-06-22 13:51:08 來源:億速云 閱讀:202 作者:iii 欄目:開發技術

本篇內容介紹了“Java使用Class.forName加載外部Jar類文件的問題怎么解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

故事背景

在一個框架叫 magic-api 里,可以低代碼的方式寫代碼,動態編譯執行,但是要想加載一些 import 類進來,需要前提在項目里加載 jar 完成后才可以 import,那么這樣每來一個新的 class,就都需要重新加載 class 到項目,然后打包項目,再 import……非常繁瑣?。?!

當然這邊還要提到 magic 的一個大概執行過程,拿到一份源碼時,頭文件上的 import 會經過源碼里 Class.forName 進行加載到內存,有人會說,那直接用 URLClassLoader 不就行了,的確可以,但是這樣需要改源碼了,也比較繁瑣,所以為了不該源碼,怎么去兼容又方便的解決這個問題呢?

解決方案

那么就產生了一個問題,是否有一種辦法可以直接通過外部 jar 直接加載 class 到 JVM 內存呢?

這里大概思路是用 URLClassLoader 來接收文件,然后 Class.forName 就能在項目范圍內拿到該類去加載到內存,就是這樣。

順便提一句:那 magic-api 框架如何兼容這個問題呢,因為需要用到 URLClassLoader,其實在 magic-api 執行拿到的源碼前,提供了一個攔截器,我們可以把 URLClassLoader 放到那邊去做即可!

public class ClassLoadTest {
 
    public void test() {
        // 外部 jar 所在位置
        String path = "file:C:\\Users\\Boomni_Sun\\Desktop\\chinadaas-magic-api-0.3.1-SNAPSHOT.jar";
        URLClassLoader urlClassLoader = null;
        try {
            // 通過URLClassLoader加載外部jar
            urlClassLoader = new URLClassLoader(new URL[]{new URL(path)});
            Class<?> cls = Class.forName("com.chinadaas.magic.api.utils.MyTest", false, urlClassLoader);
            Object instance = cls.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 卸載關閉外部jar
            try {
                urlClassLoader.close();
            } catch (IOException e) {
                System.out.println("關閉外部jar失?。?quot; + e.getMessage());
            }
        }
    }
}

“Java使用Class.forName加載外部Jar類文件的問題怎么解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女