?????????????????? AppClassLoader ?????????????? ExtClassLoader ?????????????????????jar????????<Java_Runtime_Home>lib?????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????
???????????£???????????????????????????????е???????????????????????????????????????????????? Java ????????????????????Щ?????????????????????????????????????м???????????????????????????????????????????????????? ClassLoader ????????? loadClass ??????????????????????????д findClass ???????ɡ??????????????????????????????????????????
????package com.paddx.test.classloading;
????import java.io.*;
????/**
????* Created by liuxp on 16/3/12.
????*/
????public class MyClassLoader extends ClassLoader {
????private String root;
????protected Class<?> findClass(String name) throws ClassNotFoundException {
????byte[] classData = loadClassData(name);
????if (classData == null) {
????throw new ClassNotFoundException();
????} else {
????return defineClass(name?? classData?? 0?? classData.length);
????}
????}
????private byte[] loadClassData(String className) {
????String fileName = root + File.separatorChar
????+ className.replace('.'?? File.separatorChar) + ".class";
????try {
????InputStream ins = new FileInputStream(fileName);
????ByteArrayOutputStream baos = new ByteArrayOutputStream();
????int bufferSize = 1024;
????byte[] buffer = new byte[bufferSize];
????int length = 0;
????while ((length = ins.read(buffer)) != -1) {
????baos.write(buffer?? 0?? length);
????}
????return baos.toByteArray();
????} catch (IOException e) {
????e.printStackTrace();
????}
????return null;
????}
????public String getRoot() {
????return root;
????}
????public void setRoot(String root) {
????this.root = root;
????}
????public static void main(String[] args)  {
????MyClassLoader classLoader = new MyClassLoader();
????classLoader.setRoot("/Users/liuxp/tmp");
????Class<?> testClass = null;
????try {
????testClass = classLoader.loadClass("com.paddx.test.classloading.Test");
????Object object = testClass.newInstance();
????System.out.println(object.getClass().getClassLoader());
????} catch (ClassNotFoundException e) {
????e.printStackTrace();
????} catch (InstantiationException e) {
????e.printStackTrace();
????} catch (IllegalAccessException e) {
????e.printStackTrace();
????}
????}
????}
?????????????????????????£?

?????????????????????????????????????????????????????????????????ж???????н???????????????????????δ??class??????м?????????н?????????????м?????????
????1???????????????????????????????????com.paddx.test.classloading.Test????????? defineClass ????????????????д?????
????2???ò????дloadClass??????????????????????????????
????3?????? Test ???????? AppClassLoader ????????????????? com/paddx/test/classloading/Test.class ??????·??????????????????л????????????????????? AppClassLoader ?????????????????????????????????????
??????????
??????????????????????????????????????? Class ????????????????????????????????????????????????? Class ????????????????????????????? Class ?????????????????????????????????????????????????????????????????????????????μ??????????? Class ?????????????????????????Java ?淶??????????????????????????????????????????????????????????????????????? OSGi ???????????????????????????????????