黑马程序员技术交流社区

标题: 自定义加载器是不是就不用委托机制了? [打印本页]

作者: 马志军    时间: 2013-1-1 22:20
标题: 自定义加载器是不是就不用委托机制了?
本帖最后由 马志军 于 2013-1-3 08:49 编辑

覆盖了findClass方法,自己去加载了。如果找不到,说是调用父类的findClass方法,让父类去加载?那么此时的父类加载器它是不是先去找自己父类,是不是又使用委托机制了?
作者: 郝福明    时间: 2013-1-1 22:43
跟帖学习
作者: 翁鹏    时间: 2013-1-1 22:56
本帖最后由 翁鹏 于 2013-1-1 22:59 编辑

在java虚拟机中有一个叫 启动类加载器(Bootstrap ClassLoader)的东西, 它是双亲委托模型的顶层加载器,它没有父类加载器,它是根。其余的加载器都有父类加载器的。

双亲
委托模型的一般工作过程:一个类加载器收到了类加载的请求,它不会先自己去尝试加载这个类,而是把请求委派给父类加载器,一层一层都是如此, 最终所有请求都会到达顶层启动类加载器,只有当父类加载器反馈自己无法完成这个加载请求,子类加载器才会自己去尝试加载。

这只是一个模型概念,具体实现的时候应该有各方面的优化,可能有点复杂的,但我们不是虚拟机的实现团队,不用管了。


还有就是双亲委派模型只能解决一部分需求,还有一些需求要用其他的类加载器模型实现。


还有一点就是类加载器之间的父子关系不是用继承来实现的,用的是组合关系来实现的。

作者: 冉世友    时间: 2013-1-1 23:08
嗯,会的,都是会先交给自己的父类加载器去加载,
当父类加载器反馈自己无法完成这个加载请求,子类加载器才会自己去尝试加载。

不过话说回来,覆盖了findClass方法,一般都会找到的~
作者: 马志军    时间: 2013-1-2 09:29
冉世友 发表于 2013-1-1 23:08
嗯,会的,都是会先交给自己的父类加载器去加载,
当父类加载器反馈自己无法完成这个加载请求,子类加载器 ...

如果都给父类,能找到,那么自己定义的不就用不到了?跟没定义一样
作者: 冉世友    时间: 2013-1-2 22:39
马志军 发表于 2013-1-2 09:29
如果都给父类,能找到,那么自己定义的不就用不到了?跟没定义一样

有些类内容不是被加密了,父类加载了也没用啊

还有就是自定义的加载器有个自己指定的加载位置,只要跟父类不一样,
父类肯定找不到的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2