導航:首頁 > 編程語言 > java動態載入java

java動態載入java

發布時間:2023-04-14 05:20:18

『壹』 java動態探針載入與關閉

在Java應用中,可以使用動態探針來收集運行時的統計數據,以此來幫助優化性能。想要實現動含孫態探針的載入和關閉可以通過命令行參數來實現櫻喚。具體地,可以使用-javaagent選項和指定的動態探針jar包路徑來載入探針,在程序結束時,調用鉤子方法關閉探針。在代碼中,可以使用Runtime類的addShutdownHook方法注冊一個優雅停機的鉤子,這里可以先定義一個實現了Runnable介面的對象,當JVM需要或必須談頌鏈退出時將自動調用它的run()方法。在run方法中,釋放相關資源和關閉動態探針,以確保應用正常退出。

『貳』 java動態類載入機制有什麼缺點

動態類載入主要是通過反射將類對象注入進去, 優點一大堆, 很多框架底層都有用到。
缺點:沒有直接掉用直觀方便。有些動態注入, 類型錯誤只有運行時才能發現。

『叄』 如何在Java運行的時候動態載入一個jar包到classpath裡面

給你個例子自己看一下吧不會了再追問,注釋基本都有了
.io.<imgid="selectsearch-icon"src="https://gss0.bdstatic.com/70cFsjip0QIZ8tyhnq/img/iknow/qb/select-search.png"alt="搜索">File;importjava.lang.reflect.<ahref="https://www..com/s?wd=Method&tn=44039180_cpr&fenlei=--bIi4WUvYETgN-"target="_blank"class="-highlight">Method</a>;importjava.net.<ahref="https://www..com/s?wd=URL&tn=44039180_cpr&fenlei=--bIi4WUvYETgN-"target="_blank"class="-highlight">URL</a>;importjava.net.<ahref="https://www..com/s?wd=URL&tn=44039180_cpr&fenlei=--bIi4WUvYETgN-"target="_blank"class="-highlight">URL</a><ahref="https://www..com/s?wd=Class&tn=44039180_cpr&fenlei=--bIi4WUvYETgN-"target="_blank"class="-highlight">Class</a>Loader;importjava.util.List;publicfinal<ahref="https://www..com/s?wd=class&tn=44039180_cpr&fenlei=--bIi4WUvYETgN-"target="_blank"class="-highlight">class</a>Ext<ahref="https://www..com/s?wd=Class&tn=44039180_cpr&fenlei=--bIi4WUvYETgN-"target="_blank"class="-highlight">Class</a>pathLoader{privatestatic<ahref="https://www..com/s?wd=Method&tn=44039180_cpr&fenlei=--bIi4WUvYETgN-"target="_blank"class="-highlight">Method</a>add<ahref="https://www..com/s?wd=URL&tn=44039180_cpr&fenlei=--bIi4WUvYETgN-"target="_blank"class="-highlight">URL</a>=initAdd<ahref="https://www..com/s?wd=Method&tn=44039180_cpr&fenlei=--bIi4WUvYETgN-"target="_blank"class="-highlight">Method</a>();=(URLClassLoader)ClassLoader.getSystemClassLoader();/***<ahref="https://www..com/s?wd=%E5%88%9D%E5%A7%8B%E5%8C%96&tn=44039180_cpr&fenlei=--bIi4WUvYETgN-"target="_blank"class="-highlight">初始化</a>addUrl方法.*@return可訪問addUrl方法的Method對象*/(){try{Methodadd=URLClassLoader.class.getDeclaredMethod("addURL",newClass[]{URL.class});add.setAccessible(true);returnadd;}catch(Exceptione){thrownewRuntimeException(e);}}/***載入jarclasspath。*/publicstaticvoidloadClasspath(){List<String>files=getJarFiles();for(Stringf:files){loadClasspath(f);}List<String>resFiles=getResFiles();for(Stringr:resFiles){loadResourceDir(r);}}(Stringfilepath){Filefile=newFile(filepath);loopFiles(file);}(Stringfilepath){Filefile=newFile(filepath);loopDirs(file);}/***//***循環遍歷目錄,找出所有的資源路徑。*@paramfile當前遍歷文件*/privatestaticvoidloopDirs(Filefile){//資源文件只載入路徑if(file.isDirectory()){addURL(file);File[]tmps=file.listFiles();for(Filetmp:tmps){loopDirs(tmp);}}}/***循環遍歷目錄,找出所有的jar包。*@paramfile當前遍歷文件*/privatestaticvoidloopFiles(Filefile){if(file.isDirectory()){File[]tmps=file.listFiles();for(Filetmp:tmps){loopFiles(tmp);}}else{if(file.getAbsolutePath().endsWith(".jar")||file.getAbsolutePath().endsWith(".zip")){addURL(file);}}}/***通過filepath載入文件到classpath。*@paramfilePath文件路徑*@returnURL*@throwsException異常*/privatestaticvoidaddURL(Filefile){try{addURL.invoke(classloader,newObject[]{file.toURI().toURL()});}catch(Exceptione){}}/****從配置文件中得到配置的需要載入到classpath里的路徑集合。*@return*/privatestaticList<String>getJarFiles(){//TODO從properties文件中讀取配置信息如果不想配置可以自己new一個List<String>然後把jar的路徑加進去然後返回returnnull;}/***從配置文件中得到配置的需要載入classpath里的資源路徑集合*@return*/privatestaticList<String>getResFiles(){//TODO從properties文件中讀取配置信息略如果不想配置可以自己new一個List<String>然後把jar的路徑加進去然後返回額如果沒有資源路徑為空就可以了returnnull;}publicstaticvoidmain(String[]args){ExtClasspathLoader.loadClasspath();}}

『肆』 一個java工程在運行的時候怎麼動態載入另一個java工程

直接寫上 new ClassFromPrj2(); 不用你手工「載入」,Java 中載入默認是由 JVM 虛擬器自動完成的,只要引用到的類ClassFromPrj2 在 classpath 中即可。等你達到中級水平,知道 Java Reflection 和 ClassLoader 之後你就知道是怎麼回事了。

我是假設 loadJavaPrj 是第一個工程,假設它使用了第二個工程的類 ClassFromPrj2 的話,那就是

ClassFromPrj2 worker = new ClassFromPrj2();
worker.xxx();

你在運行中需要確保的是:prj2 這個工程的 jar 或 class folder 出現在 java -cp XXX 這個 classpath (-classpath 或 -cp) 參數列表中就可以了。
你在eclipse 項目的 .classpath 文件中發現的東西表明你還是嘗試了解工具的細節,但那個僅僅是 Eclipse 用來幫我們生成命令行參數的配置文件,最終我們需要知道 javac 或 java 這樣的命令行需要什麼參數,這一點一般書上和老師都會講到(但他們一般不會講解Eclipse怎麼工作的)。

『伍』 java中類的動態載入到底有什麼作用,直接導入包在獲取該類的實例不是一樣嗎

當然不一樣啊,這樣維護成本太高了,如果是動態載入只需要配置文件修改一岩叢下類庫位置就可以了,假段棗如有100個類需要引用這握棗拆個第三方包那麼就需要重新打開程序一個一個import嗎?不符合開閉原則,不利於維護

『陸』 Java SWT動態載入界面(將界面的每個部分做成模塊,然後由主程序load或者調用)

首先,把很多tab共同的方法抽出到一個抽象的類(我說的類,每個類都為獨立文件)專,把一些有這樣屬的操作但是具體操作不確定的抽成抽象方法。列如抽象類可以 叫 AbstractedTab, 然後。具體的Tab各自單獨用一個類繼承AbstractedTab,根據自己特有的操作實現抽象方法。(這里有用到了一個設計模式:模板法),然後這些具體的的Tab可以根據需要,放到需要用到的類中new(產生)實例。

『柒』 java可以動態載入一個jar包,並且調用裡面的類和方法嗎

可以的
jar可以看成來是一個自存放很多class的的地方,jar包放入classpath後,其實只要能實現動態的載入類就可以實現題目中的需求了

技術是 java 反射機制,就是一個利用提供類全名而得到這個類實例的機制

通過反射得到Class這個類,然後可以得到關於這個類的方法,欄位等相關信息

具體可以查看相關知識

『捌』 java怎麼在靜態方法中使用動態方法

Java靜態方法是不能調用動態方法的,原因如下:x0dx0a1.因為靜態方法和如孫動態方法嫌磨在內存中的位置不一樣,靜態方法的地址空間在載入類的時候就確定,而動態方法的地址空間在生成類實例的時候確定x0dx0a2.靜態方法在程芹橡斗序初始化後會一直貯存在內存中,不會被垃圾回收器回收,x0dx0a 非靜態方法只在該類初始化後貯存在內存中,當該類調用完畢後會被垃圾回收器收集釋放。x0dx0a3.靜態方法在初始化類時初始化,並分配內存;動態方法只有先創建類的實例對象後,才能調用動態方法

『玖』 怎樣實現java代碼的動態載入

1.將你這拆凳段字元串輸出到一個文件里,用Java類文件的方式命名。
2.調用外部javac命令將該文件編譯。
3.用類載入器(ClassLoad)動態載入新的class文件並用Class.forName()注冊該類,然後就可以正常使用了。
上稿御毀面的每一步都能在中找到實現方法鍵備,自己發揮吧。

『拾』 關於java動態載入jar的問題

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

// 位於hello.jar
package com.flyingzl;

public class Util {

public static void getVersion(){

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

}

import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class Main {
public static void main(String[] args) {

URL[] urls = new URL[] {};
MyClassLoader classLoader = new MyClassLoader(urls, null);

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

}

static class MyClassLoader extends URLClassLoader {

public MyClassLoader(URL[] urls) {
super(urls);
}

public MyClassLoader(URL[] urls, ClassLoader parent) {
super(urls, parent);
}

public void addJar(URL url) {
this.addURL(url);
}

}

}

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

閱讀全文

與java動態載入java相關的資料

熱點內容
藏文軟體app怎麼可以下載 瀏覽:960
鍵盤文件名 瀏覽:538
電腦自帶驅動在那個文件夾 瀏覽:531
c窗體讀取文件夾 瀏覽:965
asp婚紗攝影網站 瀏覽:684
文件恢復的原理 瀏覽:828
移動硬碟清空怎麼恢復數據 瀏覽:433
文件保存電腦桌面英文 瀏覽:128
debian共享文件夾 瀏覽:633
平安易貸不用app怎麼審核 瀏覽:883
如何學習編程環境 瀏覽:335
榮耀6升級60 瀏覽:281
如何點擊移動數據開啟 瀏覽:95
javajdbcmysql增刪改查 瀏覽:844
新的熔點儀為什麼測不出來數據 瀏覽:364
淘寶滾動海報代碼 瀏覽:953
如何查看本機sdk版本 瀏覽:678
lua2進制文件 瀏覽:710
除了plc編程還有什麼技巧 瀏覽:320
電視無線網路已關閉如何開啟 瀏覽:430

友情鏈接