自定义classloader装载fastjson包

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: [email protected]  MSN: [email protected]  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一个接口,这样能动态装载接口的实现类

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。