@Override protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { synchronized (getClassLoadingLock(name)) { Class<?> clazz = findLoadedClass1(name); if (clazz == null) { clazz = loadClass1(name, resolve); } return clazz; } }
private Class<?> loadClass1(String name, boolean resolve) throws ClassNotFoundException { Class<?> clazz; if (shouldDefer(name)) { clazz = loadByDeferClassLoader(name); } else { clazz = loadClassByThisClassLoader(name); } if (resolve) { resolveClass(clazz); } classes.put(name, new SoftReference<Class<?>>(clazz)); return clazz; }
private Class<?> findLoadedClass1(String name) {SoftReference<Class<?>> reference = classes.get(name); Class<?> clazz = null; if (reference != null) { clazz = reference.get(); } if (clazz == null) { clazz = findLoadedClass(name); } return clazz; } }
@Override public Enumeration<URL> getResources(String name) throws IOException { // If deferTo is already the parent, then we'd end up returning two copies of each resource... if (deferTo.equals(getParent())) { return deferTo.getResources(name); } else { return super.getResources(name); } }