Heim  >  Artikel  >  Java  >  So verwenden Sie den Java-Klassenlader URLClassLoader

So verwenden Sie den Java-Klassenlader URLClassLoader

WBOY
WBOYnach vorne
2023-05-01 22:55:051334Durchsuche

Eine einfache Demo des URLClassLoader des Klassenladers

public class Test {
	public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException {
		URL[] urls = new URL[] {new URL("http://192.168.119.132:8080/images/animal.jar")};
		URLClassLoader classLoader = new URLClassLoader(urls);
		//加载类以后就可以得到 Class 对象了
		Class<?> clazz = classLoader.loadClass("com.learn.animal.Dog");
		classLoader.close();  //加载完类以后就可以删除了。
		//关闭 classLoader, 否则会造成 资源泄露  Resource leak
		//这里不使用默认的构造器,使用带参数的构造器 获取特殊的构造器
		Constructor<?> con = clazz.getDeclaredConstructor(String.class, int.class, int.class);
		//使用构造器创建对象
		Object ob = con.newInstance("小黑",12,50);
		//在调用 Dog 对象的 say 方法,返回对 Dog 对象自己的描述
		Method mtd0 = clazz.getMethod("say", new Class<?>[] {});  
		String dogSay = (String)mtd0.invoke(ob, new Object[] {});  
		System.out.println(dogSay);
		//再使用setter 方法,改变属性  模拟 Dog 对象,逐渐长大,变胖  哈哈!
		System.out.println("Three years later......");
		Method mtd1 = clazz.getMethod("setAge", int.class);
		mtd1.invoke(ob, 15);
		Method mtd2 = clazz.getMethod("setWeight", int.class);
		mtd2.invoke(ob, 70);
		//注意这些方法是有返回值的!  返回值都是 Object 类型,需要自己强转类型
		dogSay = (String)mtd0.invoke(ob, new Object[] {});  
		System.out.println(dogSay);
		System.out.println("It&#39;s over!");
	}
}

Für die URL-Ressource hier habe ich einen einfachen Nginx-Server verwendet, der in der virtuellen Maschine integriert ist und auch durch Befolgen der Tutorials anderer Leute erstellt wurde Sehr einfacher Server, haha. Für die Nutzung reicht dies jedoch aus. Wenn keine Bedingungen vorliegen oder Sie es einfacher haben möchten, können Sie das lokale Dateisystem verwenden.
Verwenden Sie einfach file:///jar-Paketadresse, um es zu ersetzen. file:///jar包地址 这个替换就行了。

这里使用的 jar 包也很简单,但是我直接打成了 jar 包,只有 class 文件了,我反编译以下,把代码图片贴出来吧。
这个反编译不是全部代码,但是细节很简单,只有一个 say()

Das hier verwendete JAR-Paket ist ebenfalls sehr einfach, aber ich habe es direkt in ein JAR-Paket eingegeben, das nur Klassendateien enthält. Ich werde das Folgende dekompilieren und das Codebild veröffentlichen.

Diese Dekompilierung ist nicht der gesamte Code, aber die Details sind sehr einfach. Es gibt nur eine say()-Methode, um sie zu vervollständigen. So verwenden Sie den Java-Klassenlader URLClassLoader

Beachten Sie, dass die -encoding utf-8 hier den Codierungszeichensatz angibt, da der Code in ausgeführt wird cmd. Wenn es Chinesisch gibt, kann es nicht kompiliert werden. So verwenden Sie den Java-Klassenlader URLClassLoader

#🎜🎜##🎜🎜#

Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Java-Klassenlader URLClassLoader. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Was ist Java-Typ-Inferenz?Nächster Artikel:Was ist Java-Typ-Inferenz?