0
点赞
收藏
分享

微信扫一扫

jvm复习: SystemClassLoaderAction源码


class SystemClassLoaderAction
    implements PrivilegedExceptionAction<ClassLoader> {
    private ClassLoader parent;

    SystemClassLoaderAction(ClassLoader parent) {
        this.parent = parent;
    }

    public ClassLoader run() throws Exception {
        String cls = System.getProperty("java.system.class.loader");
        if (cls == null) {
            return parent;
        }

        Constructor<?> ctor = Class.forName(cls, true, parent)
            .getDeclaredConstructor(new Class<?>[] { ClassLoader.class });
        ClassLoader sys = (ClassLoader) ctor.newInstance(
            new Object[] { parent });
        Thread.currentThread().setContextClassLoader(sys);
        return sys;
    }
}

当通过命令行参数指定自定义的应用类加载器时,该加载器一定要有接收一个ClassLoader参数的构造方法。因为这里通过反射来生成ClassLoader来返回


举报

相关推荐

0 条评论