導航:首頁 > 文件管理 > leravel中間件配置文件

leravel中間件配置文件

發布時間:2023-03-03 19:32:48

java自定義classloader在載入jar包和classes的時候,classloader不能找到classpath下的配置文件

設我們有一個hello.jar文件,裡面有一個Util類,我們希望在運行期調將這個jar包放入到我們運行環境並且調用裡面的Util.getVersion方法。怎麼實現?
在java中,我們的類都是通過ClassLoader來載入的,同時ClassLoader具有層級關系,當某個類找不到時,它會去他的父類載入器去尋找,如果依然找不到,就拋出ClassNotFoundException了。
為了動態載入hello.jar裡面的Util類,我們需要將這個jar包放入到我們的類載入器中去,然後再獲取裡面的類。如下面的代碼

//位於hello.jar
packagecom.flyingzl;

publicclassUtil{

publicstaticvoidgetVersion(){

System.out.println("javaversion:"+System.getProperty("java.version"));
}

}

importjava.io.File;
importjava.lang.reflect.Method;
importjava.net.URL;
importjava.net.URLClassLoader;

publicclassMain{
publicstaticvoidmain(String[]args){

URL[]urls=newURL[]{};
MyClassLoaderclassLoader=newMyClassLoader(urls,null);

try{
classLoader.addJar(newFile("c:/hello.jar").toURI().toURL());
Class<?>clazz=classLoader.loadClass("com.flyingzl.Util");
Methodmethod=clazz.getDeclaredMethod("getVersion");
method.invoke(null);
classLoader.close();
}catch(Exceptione){
e.printStackTrace();
}

}

{

publicMyClassLoader(URL[]urls){
super(urls);
}

publicMyClassLoader(URL[]urls,ClassLoaderparent){
super(urls,parent);
}

publicvoidaddJar(URLurl){
this.addURL(url);
}

}

}

注意:這里僅僅是為了展示如何動態載入jar包,代碼寫得很粗,生產代碼需要有更完善的異常處理。我們只關心如何動態載入jar包即可。
動態載入jar包,需要用到java.net.URLClassLoader這個類,它可以指定一個路徑將jar包或者classes文件載入到類空間。載入完畢後,直接調用loadClass就可以載入指定的類,然後通過反射生成實例或者調用方法即可。
其實,Tomcat等伺服器也利用了此思路,比如每一個web應用啟動時,它都會自動載入其下的lib文件夾下的jar包。
運行程序,我們就可以看到程序正常輸出:
javaversion:1.7.0_03

閱讀全文

與leravel中間件配置文件相關的資料

熱點內容
cad為什麼打不開安裝文件 瀏覽:353
mac系統刪除win10系統文件 瀏覽:48
cmf游戲文件 瀏覽:139
word2013批註內容全部 瀏覽:687
游粉淘這網站怎麼樣 瀏覽:257
數控程序g41g42怎麼編程 瀏覽:62
抖音里邊轉發的文件到哪裡了 瀏覽:437
有雙微信功能的手機 瀏覽:466
不用網路也能上網嗎 瀏覽:247
mysql資料庫的url地址 瀏覽:12
如何復制文件夾中的多個文件名 瀏覽:52
馮諾依曼數據存在在什麼中 瀏覽:16
多份文件部分內容遭塗黑遮去 瀏覽:133
哪些質量管理活動需要形成文件 瀏覽:521
如何適應大數據時代心得 瀏覽:146
什麼是名目數據 瀏覽:457
文件夾標注 瀏覽:243
swfupload選擇單個文件 瀏覽:136
blocks提示找不到頭文件 瀏覽:761
在哪裡能編程C語言 瀏覽:425

友情鏈接