关于URLClassLoader

java.lang.Object

       --- java.lang.ClassLoader
              --- java.security.SecureClassLoader
                      ---  java.net.URLClassLoader
                            --- sun.misc.Launcher$ExtClassLoader

java.lang.Object

       --- java.lang.ClassLoader
              --- java.security.SecureClassLoader
                      ---  java.net.URLClassLoader
                            --- sun.misc.Launcher$AppClassLoader

通常一个类的加载过程是这样的通过当前的类加载器的父加载器尝试查找,如果没有再找其父加载器尝试加载,直到最终的bootstrap classloader为止

public static void main(String[] args) {
		ClassLoader cl = getClassLoader();
		if (cl == null) {
			return;
		}
		try {
			invokeRt(cl, args);
		} catch (Exception e) {
			e.printStackTrace();
			return;
		}
	}

	private static ClassLoader getClassLoader() {

		File cfgFile = new File("config.properties");
		if (!cfgFile.exists()) {
			PrintStream print = new PrintStream(System.out, true);
			print.println("Need file: " + cfgFile);
			return null;
		}

		Properties prop = Utils.loadProperties(cfgFile);
		if (prop == null) {
			return null;
		}

		List urlList = new LinkedList();

		String jarString = prop.getProperty("rtjars");
		for (String one : jarString.split(",")) {
			String basePath = "/opt";
			URL url;

			File file = new File(basePath + "/" + one.trim());
			try {
				url = file.toURI().toURL();
			} catch (MalformedURLException e) {
				e.printStackTrace();
				return null;
			}

			urlList.add(url);
		}

		URL[] urlAry = new URL[urlList.size()];
		urlAry = (URL[]) urlList.toArray(urlAry);
		URLClassLoader loader = new URLClassLoader(urlAry);

		return loader;
	}

	private static void invokeRt(ClassLoader cl, String[] args)
			throws Exception {
		Class clazz = cl.loadClass("com.angiehawk7.rtool.Main");
		Object obj = clazz.newInstance();
		Method method = clazz.getMethod("start", String.class);

		Object[] methodArgs = { args };
		method.invoke(obj, methodArgs);
	}



转载于:https://my.oschina.net/hrbeu05/blog/265402

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值