码迷,mamicode.com
首页 > Web开发 > 详细

自定义classloader装载fastjson包

时间:2015-04-01 17:48:02      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:classloader   jdk   

public class Test {

	/**
	 * @param args
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public static void main(String[] args) throws InstantiationException, IllegalAccessException {
		ClassLoaderUtil.loadJarFile(new File("D:\\MyEclipse10\\unicomspace\\testclassload\\fastjson-1.1.26.jar"));
		Class<?> clazz = ClassLoaderUtil.loadclass("com.alibaba.fastjson.JSON");
		System.out.println(clazz.getSimpleName());
	
	}

}


上面的代码是测试,下面是实现

import java.io.File;  
import java.lang.reflect.Method;  
import java.net.URL;  
import java.net.URLClassLoader;  
import java.util.ArrayList;  
import java.util.List;  
  
/** 
15. * @author obullxl 
16. * 
17. * email: obullxl@163.com  MSN: obullxl@hotmail.com  QQ: 303630027 
18. * 
19. * Blog: http://obullxl.iteye.com 
20. */  
public final class ClassLoaderUtil {  
    /** URLClassLoader的addURL方法 */  
	private static Method addURL = initAddMethod();  
      
    /** 初始化方法 */  
    private static final Method initAddMethod() {  
        try {  
            Method add = URLClassLoader.class  
                .getDeclaredMethod("addURL", new Class[] { URL.class });  
            add.setAccessible(true);  
            return add;  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return null;  
    }  
  
    private static URLClassLoader system = (URLClassLoader) ClassLoader.getSystemClassLoader();  
  
    /** 
     * 循环遍历目录,找出所有的JAR包 
     */  
    private static final void loopFiles(File file, List<File> files) {  
        if (file.isDirectory()) {  
            File[] tmps = file.listFiles();  
            for (File tmp : tmps) {  
                loopFiles(tmp, files);  
            }  
        } else {  
            if (file.getAbsolutePath().endsWith(".jar") || file.getAbsolutePath().endsWith(".zip")) {  
                files.add(file);  
            }  
        }  
    }  
  
    /** 
     * <pre> 
     * 加载JAR文件 
     * </pre> 
     * 
     * @param file 
     */  
    public static final void loadJarFile(File file) {  
        try {  
            addURL.invoke(system, new Object[] { file.toURI().toURL() });  
            System.out.println("加载JAR包:" + file.getAbsolutePath());  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
    public static final Class<?>  loadclass(String handler) {  
        try {  
        	 Class<?> clazz = system.loadClass(handler);
        	 return clazz;
        } catch (Exception e) {  
            e.printStackTrace();  
        }
		return null;  
    }  
    /** 
     * <pre> 
     * 从一个目录加载所有JAR文件 
     * </pre> 
     * 
     * @param path 
     */  
    public static final void loadJarPath(String path) {  
        List<File> files = new ArrayList<File>();  
        File lib = new File(path);  
        loopFiles(lib, files);  
        for (File file : files) {  
            loadJarFile(file);  
        }  
    }  
}  

在很多情况是newinstance一个接口,这样能动态装载接口的实现类

 

自定义classloader装载fastjson包

标签:classloader   jdk   

原文地址:http://blog.csdn.net/u010278923/article/details/44808389

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!