91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

發布時間:2022-06-22 13:51:08 來源:億速云 閱讀:188 作者: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失敗:" + e.getMessage());
            }
        }
    }
}

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

向AI問一下細節

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

AI

浮梁县| 肇庆市| 册亨县| 黄石市| 灵武市| 资中县| 定远县| 海晏县| 阳信县| 方山县| 尚义县| 汝南县| 阿巴嘎旗| 峨眉山市| 上饶县| 上林县| 贺兰县| 南宫市| 池州市| 定日县| 湟中县| 于田县| 乌苏市| 太谷县| 新巴尔虎左旗| 阿勒泰市| 囊谦县| 石渠县| 久治县| 平昌县| 开平市| 铁岭市| 亚东县| 确山县| 栾城县| 陇南市| 雷州市| 秀山| 汝州市| 乌兰浩特市| 垣曲县|