自定义Cass loader
Posted fillpv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义Cass loader相关的知识,希望对你有一定的参考价值。
1、先建一个被加载的测试类
public class Person private Integer age; public Integer getAge() return age; @Override public String toString() return "测试类加载成功";
2、建一个自定义的类加载器
继承ClassLoader类,重写findClass,这样不破坏Java的双亲委派机制。
public class PathClassLoader extends ClassLoader private String classPath; public PathClassLoader() public void setClassPath(String classPath) this.classPath = classPath; @Override protected Class<?> findClass(String className) throws ClassNotFoundException byte[] classData = getClassByte(className); if(classData == null) throw new ClassNotFoundException(); return defineClass(className,classData,0,classData.length); public byte[] getClassByte(String className) String path = classPath + File.separator+ className.replace(".",File.separator) + ".class"; InputStream inputStream = null; try inputStream = new FileInputStream(path); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length = 0; while ((length=inputStream.read(buffer)) != -1) byteArrayOutputStream.write(buffer,0 ,length); return byteArrayOutputStream.toByteArray(); catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); return null;
3、测试类
public static void main(String[] args) throws Exception String classPath = "D:\\workspace\\idea\\fmdes\\target\\classes"; PathClassLoader classLoader = new PathClassLoader(); classLoader.setClassPath(classPath); String className = "com.fmys.api.test.Person"; Class loadClass = classLoader.loadClass(className); System.out.println(loadClass.newInstance());
4、结果会输出 测试类加载成功
以上是关于自定义Cass loader的主要内容,如果未能解决你的问题,请参考以下文章