class GeccoClassLoader extends ClassLoader {
	
	private static final Log LOG = LogFactory.getLog(GeccoClassLoader.class);
	
	private Map<String, Class<?>> classes;
	
	private static GeccoClassLoader instance;
	
	/**
	 * 创建一个新的GeccoClassLoader
	 * @return GeccoClassLoader
	 */
	public static synchronized GeccoClassLoader create() {
		if(instance != null) {
			instance.classes.clear();
		}
		ClassLoader parent = Thread.currentThread().getContextClassLoader();
		if(parent != null) {
			instance = new GeccoClassLoader(parent);
		} else {
			instance = new GeccoClassLoader();
		}
		return instance;
	}
	
	public static synchronized GeccoClassLoader get() {
		if(instance == null) {
			instance = create();
		}
		return instance;
	}
	
	public GeccoClassLoader() {
		classes = new HashMap<String, Class<?>>();
	}
	
	public GeccoClassLoader(ClassLoader parent) {
		super(parent);
		classes = new HashMap<String, Class<?>>();
	}

	@Override
	protected Class<?> findClass(String name) throws ClassNotFoundException {<FILL_FUNCTION_BODY>}
	
	@Override
	public Class<?> loadClass(String name) throws ClassNotFoundException {
		LOG.debug("load from GeccoClassLoader : " + name);
		return super.loadClass(name);
	}

	public void addClass(String key, Class<?> clazz) {
		classes.put(key, clazz);
	}

	public Map<String, Class<?>> getClasses() {
		return classes;
	}

}

		Class<?> clazz = classes.get(name);
		if(clazz == null) {
			throw new ClassNotFoundException(name);
		}
		LOG.debug("find from GeccoClassLoader : " + name);
		return clazz;
	
<methods>public void clearAssertionStatus() ,public final java.lang.Package getDefinedPackage(java.lang.String) ,public final java.lang.Package[] getDefinedPackages() ,public java.lang.String getName() ,public final java.lang.ClassLoader getParent() ,public static java.lang.ClassLoader getPlatformClassLoader() ,public java.net.URL getResource(java.lang.String) ,public java.io.InputStream getResourceAsStream(java.lang.String) ,public Enumeration<java.net.URL> getResources(java.lang.String) throws java.io.IOException,public static java.lang.ClassLoader getSystemClassLoader() ,public static java.net.URL getSystemResource(java.lang.String) ,public static java.io.InputStream getSystemResourceAsStream(java.lang.String) ,public static Enumeration<java.net.URL> getSystemResources(java.lang.String) throws java.io.IOException,public final java.lang.Module getUnnamedModule() ,public final boolean isRegisteredAsParallelCapable() ,public Class<?> loadClass(java.lang.String) throws java.lang.ClassNotFoundException,public Stream<java.net.URL> resources(java.lang.String) ,public void setClassAssertionStatus(java.lang.String, boolean) ,public void setDefaultAssertionStatus(boolean) ,public void setPackageAssertionStatus(java.lang.String, boolean) <variables>static final boolean $assertionsDisabled,final java.lang.Object assertionLock,Map<java.lang.String,java.lang.Boolean> classAssertionStatus,private volatile ConcurrentHashMap<?,?> classLoaderValueMap,private final ArrayList<Class<?>> classes,private boolean defaultAssertionStatus,private final java.security.ProtectionDomain defaultDomain,private final jdk.internal.loader.NativeLibraries libraries,private final java.lang.String name,private final java.lang.String nameAndId,private static final java.security.cert.Certificate[] nocerts,private final ConcurrentHashMap<java.lang.String,java.security.cert.Certificate[]> package2certs,private Map<java.lang.String,java.lang.Boolean> packageAssertionStatus,private final ConcurrentHashMap<java.lang.String,java.lang.NamedPackage> packages,private final ConcurrentHashMap<java.lang.String,java.lang.Object> parallelLockMap,private final java.lang.ClassLoader parent,private static volatile java.lang.ClassLoader scl,private final java.lang.Module unnamedModule