自定义类加载器

来源:互联网 发布:电脑摄像头录像软件 编辑:程序博客网 时间:2024/06/02 02:31
/** *  */package com.bzu.csh;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;/** *  * 项目名称:Test1 类名称:Test2 类描述: 创建人:admin 创建时间:2017年1月7日 下午9:41:36 修改人:admin * 修改时间:2017年1月7日 下午9:41:36 修改备注: *  * @version *  */public class MyClassLoader extends ClassLoader {private String name;private String path = "d:\\";private final String fileType = ".class";public MyClassLoader(String name) {super();// system加载器为父加载器this.name = name;}public MyClassLoader(ClassLoader parent, String name) {super(parent);// 显示指定该类加载器的父加载器this.name = name;}/** * ClassLoader API中找到的 */public Class<?> findClass(String name) {byte[] b = loadClassData(name);return defineClass("com.bzu.csh." + name, b, 0, b.length);}private byte[] loadClassData(String name) {InputStream is = null;byte[] data = null;ByteArrayOutputStream baos = null;try {// 转换. --> /this.name = this.name.replace(".", "/");is = new FileInputStream(new File(path + name + fileType));baos = new ByteArrayOutputStream();int ch = 0;while (-1 != (ch = is.read())) {baos.write(ch);}data = baos.toByteArray();} catch (Exception e) {} finally {try {is.close();baos.close();} catch (Exception e2) {// TODO: handle exception}}return data;}public static void main(String[] args) throws Exception {MyClassLoader loader = new MyClassLoader("loader1");// 父加载器为sysout加载器loader.setPath("d:\\myapp\\myclass\\");MyClassLoader loader1 = new MyClassLoader(loader, "loader1");// 父加载器器为loaderloader1.setPath("d:\\myapp\\myclass\\");MyClassLoader loader2 = new MyClassLoader(null, "loader2");// 父加载器为bootstrap加载器loader2.setPath("d:\\myapp\\myclass\\");// test(loader);// test(loader1);test(loader2);}public static void test(ClassLoader loader) throws InstantiationException,IllegalAccessException, ClassNotFoundException {Class clazz = loader.loadClass("Sample");Object instance = clazz.newInstance();}@Overridepublic String toString() {return this.name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public String getFileType() {return fileType;}}

/** *  */package com.bzu.csh;/** *  * 项目名称:Test1 类名称:Sample 类描述: 创建人:admin 创建时间:2017年1月8日 下午3:31:16 修改人:admin * 修改时间:2017年1月8日 下午3:31:16 修改备注: *  * @version *  */public class Sample {public int v1 = 1;public Sample() {System.out.println("Sample is loading"+ this.getClass().getClassLoader());}}

0 0