Maison >Java >javaDidacticiel >Comment utiliser le chargeur de classe Java URLClassLoader

Comment utiliser le chargeur de classe Java URLClassLoader

WBOY
WBOYavant
2023-05-01 22:55:051382parcourir

Une simple démo du chargeur de classe URLClassLoader

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!");
	}
}

La ressource URL ici est un simple serveur nginx construit dans une machine virtuelle. Je l'ai également construit en suivant les tutoriels d'autres personnes, haha. Cependant, cela suffit à l'utilisation. S'il n'y a aucune condition, ou si vous souhaitez être plus simple, vous pouvez utiliser le système de fichiers local.
Utilisez simplement file:///jar package address pour le remplacer. file:///jar包地址 这个替换就行了。

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

Le package jar utilisé ici est également très simple, mais je l'ai directement tapé dans un package jar, qui ne contient que des fichiers de classe. Je vais décompiler ce qui suit et publier l'image du code.

Cette décompilation ne représente pas l'intégralité du code, mais les détails sont très simples. Il n'y a qu'une seule méthode say(). Vous pouvez vous référer à la capture d'écran ci-dessous pour la compléter. Comment utiliser le chargeur de classe Java URLClassLoader

Ensuite, il y a la capture d'écran en cours d'exécution. Notez que -encoding utf-8 spécifie ici le jeu de caractères d'encodage à utiliser, car le code exécuté dans cmd peut ne pas être compilé s'il y a du chinois. Comment utiliser le chargeur de classe Java URLClassLoader

🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer