ClassLoader:假装找不到类,因此子加载器可以处理它

时间:2015-12-24 13:35:06

标签: java classloader urlclassloader

我想创建一个URLClassLoader的子类,当调用loadClass()时,可以用反射检查加载的类,并有条件地决定假装它找不到该类,以便允许用于子类加载器来处理加载。会有类似以下的工作吗?

@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
    Class<?> c = super.findClass(name);

    if (letChildHandleLoad(c))
        throw new ClassNotFoundException();

    return c;
}

1 个答案:

答案 0 :(得分:0)

loadClass的默认行为是调用getParent().loadClass,然后调用findClass。要获得您要描述的行为,通常不会修改父类加载器;相反,通常您可以通过覆盖loadClass方法来首先调用findClass来修改子类加载器。这样,源于子类加载器的loadClass调用将在父类之前从其本地类路径加载类,但是从父类加载器发起的loadClass调用将按预期工作。