600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > loadClass 使用

loadClass 使用

时间:2020-11-14 07:35:24

相关推荐

loadClass 使用

从其他位置加载类

public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, IllegalAccessException, InstantiationException {URL url = new URL("file:///D:\\work\\audit\\ccchains\\Clas\\");ClassLoader cls = new URLClassLoader(new URL[]{url});Class c = cls.loadClass("org.exps.Calc");c.newInstance();}

报错了

要去掉包名

成功运行了

如果有包名要有对应目录

http

package org.Tutor;import .MalformedURLException;import .URL;import .URLClassLoader;public class ClsHttp {public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, IllegalAccessException, InstantiationException {URL url = new URL("http://localhost:8088/");ClassLoader cls = new URLClassLoader(new URL[]{url});Class c = cls.loadClass("Calcd");c.newInstance();}}

jar

URL url = new URL("jar:http://localhost:8088/H.jar!/");ClassLoader cls = new URLClassLoader(new URL[]{url});Class c = cls.loadClass("Calcd");c.newInstance();

URLclassloader 支持 file/http/jar…

从byte code加载

ClassLoader cls = ClassLoader.getSystemClassLoader();Method md = ClassLoader.class.getDeclaredMethod("defineClass", String.class,byte[].class, int.class, int.class);md.setAccessible(true);byte[] code = Files.readAllBytes(Paths.get("D:\\work\\audit\\ccchains\\Clas\\Calcdc.class"));Class c = (Class) md.invoke(cls,"Calcdc",code,0,code.length);c.newInstance();

unsafe使用

ClassLoader cls = ClassLoader.getSystemClassLoader();Class c = Unsafe.class;Field field = c.getDeclaredField("theUnsafe");field.setAccessible(true);Unsafe unsafe = (Unsafe) field.get(null);byte[] code = Files.readAllBytes(Paths.get("D:\\work\\audit\\ccchains\\Clas\\Calcdc.class"));Class c2 = unsafe.defineClass("Calcdc",code,0,code.length,cls,null);c2.newInstance();

spring里面可以直接用

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。