自定义ClassLoader
来源:互联网 发布:淘宝联盟官网下载 编辑:程序博客网 时间:2024/05/23 01:13
package com.popo.test;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class MyClassLoader extends ClassLoader { String filePath = "D:/myclass/"; ClassLoader parent ; public MyClassLoader(ClassLoader parent) { // TODO Auto-generated constructor stub this.parent=parent; } @Override protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { // TODO Auto-generated method stub Class c = null; try { c = findLoadedClass(name); if (c != null) return c; try { c = parent.loadClass(name); } catch (ClassNotFoundException e) { // TODO: handle exception// e.printStackTrace(); } if (c == null) c = myFindClass(name); return c; } catch (Exception e) { // TODO: handle exception } return super.loadClass(name, resolve); } private Class<?> myFindClass(String name) throws ClassNotFoundException { String fname = name.replaceAll("\\.", "/"); System.out.println(name); File classF = new File(filePath + fname + ".class"); try { FileInputStream fin = new FileInputStream(classF); try { int len = fin.available(); byte[] b = new byte[len]; fin.read(b, 0, len); Class<?> c = defineClass(name, b, 0, len); fin.close(); return c; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); throw (new ClassNotFoundException(name + ".class not found in " + filePath)); } return null; }}
测试:
先用记事本写个简单的累吧:
public class MyClass {public static void p(){System.out.println("hello in MyClass loader");}}
手动编译下 javac MyClass.java
然后把生成的class放到D:/myclass 目录下
测试类:
package com.popo.test;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class MyClassLaoderTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MyClassLaoderTest mct = new MyClassLaoderTest(); MyClassLoader m = new MyClassLoader( mct.getClass().getClassLoader()); try { Class c = m.loadClass("MyClass",true); Object o =c.newInstance(); Method method =c.getMethod("p", null); method.invoke(o, null); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}运行结果:
MyClass
hello in MyClass loader
yeah! Succ
- 自定义ClassLoader
- 自定义ClassLoader
- 自定义ClassLoader
- 自定义ClassLoader
- 自定义ClassLoader
- 自定义ClassLoader
- 自定义ClassLoader
- 自定义ClassLoader
- 自定义ClassLoader
- Java_ClassLoader(ClassLoader / 自定义ClassLoader / DexClassLoader)
- 自定义一个ClassLoader.
- 自定义EclipsePlugin ClassLoader (2)
- 自定义classloader的实现
- 自定义ClassLoader 简单例子
- java 自定义ClassLoader
- 自定义ClassLoader类
- 自定义 Java ClassLoader
- 自定义ClassLoader解析
- myeclips8+jboss5+mysql5配置测试实体bean
- LINUX中SAMBA详细安装
- 资深软件测试工程师怎样炼成的?
- linux常用命令
- gcc gdb make makefile
- 自定义ClassLoader
- 2012CSDN年度博客之星评选http://vote.blog.csdn.net/item/blogstar/xyz_lmn
- MySql常用命令总结
- 本小组做的作品,关于智慧城市方面的!!!
- RegOpenKeyEx 返回值 2
- 虚函数的可访问性
- 一个fork的面试题
- 翻编译指令
- 理解动画的参考文章