A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如题.张老师讲的关于类加载器的视频看完了,我在写总结的时候有了这么一个疑问,那就是自定义的类加载器需要继承ClassLoader类,并覆盖它的findClass方法,但是有关于这个自定义的类加载器是如何挂到JVM提供的三个类加载器上面这一点上却是没有说,只说了默认是挂在AppClassLoader类加载器上的,如何设定却没有提到.还望知道的同学或前辈们指点一二!谢谢,

2 个回复

倒序浏览
本帖最后由 冯佩 于 2013-2-12 18:20 编辑

继承ClassLoader以后,ClassLoader中的loadClass()方法可保证委托机制流程在子类类加载器中进行,自定义的类加载器正是由于继承的loadClass()方法来挂到JVM提供的类加载器上的,自定义的类加载器默认是挂在AppClassLoader类加载器上的,因为委托机制是单亲形式的运作流程,不能出现一个父类两个子类的情况,因为在加载类时不知道该选择哪个子类加载器去加载类,这就会出问题,再则,BootStrap和ExtClassLoader是加载特定目录下特定类的加载器,这也是这两个父类加载器不能有自定义子类加载器的一个重要原因。AppClassLoader在类加载器体系中的最下一层,为AppClassLoader自定义的子类类加载器,并不影响委托机制在AppClassLoader以上的体系中进行单亲运作。所以只有挂在AppClassLoader类加载器上这一种方式,无法进行挂在AppClassLoader以上的父类加载器上的设定。在下浅见,以供参考。
回复 使用道具 举报
冯佩 发表于 2013-2-12 18:17
继承ClassLoader以后,ClassLoader中的loadClass()方法可保证委托机制流程在子类类加载器中进行,自定义的 ...

呵呵,谢谢,但是看张老师的视频上的意思是说可以存在多个子类的呀,当存在多个子类的时候以递归的方式进行!哈,当然这也只是我的看法,毕竟如果loadClass是默认挂接在AppClassLoader上的,那么自定义的类加载器如果不对这个方法进行重写肯定都是挂在这个上的嘛,那它肯定就不只一个子类了嘛
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马