问下具体双亲委派机制和全盘委托机制的区别,分别有例子吗?

我理解双亲委派机制,并且看过其源码,其主要是尽量让父加载器去加载类;但是全盘委托机制,它主要是尽量让当前加载器去加载被引用到的类,我感觉这两个机制很像啊,但看不出具体有啥区别?
比如在双亲机制下,自定义加载器AClassLoader,A类引用了B类(两个都是自定义类),则开始让AClassLoader加载,然后往上委托,两者最终还是让AClassLoader去加载
那在全盘机制下,按照它的意思,比如自定义加载器BClassLoader,还是A类引用B类,那按照向上委托,最终还是BClassLoader来加载,先加载了A类然后再到B类,那全盘机制下,B类必须要用BClassLoader咯?那看起来没啥区别呀好像。
再假如,全盘机制下,我A类引用了String这个核心类,开始加载A类用的BClassLoader,我要加载String类了,但是没找到咋办,因为我BClassLoader肯定是我设置的某个特殊路径。。
目前就是纠结这个,请求解答我举的例子这个理解做分析!!

img

全盘委托的意思是:当一个类加载器加载了某类后,该类所引用的类也都交给该类加载器。例如类加载器loaderA加载了A类,A类引用了B和C类,那么B和C类也都交给loaderA加载。在双亲委派机制下,loaderA仍然先将B和C委派给父加载器,如果父加载器都未加载成功,则loaderA自己加载。
全盘委托和双亲委派是两个不同的概念,全盘委托是谁来加载这些类,双亲委派是类加载流程中的一部分。
详细见:https://blog.csdn.net/nianqrzhanghw/article/details/118696323?spm=1001.2014.3001.5502

  • 你理解的不全对。

  • 双亲委派,是先让父加载器加载,一层一层往上委派,直到最顶层类加载器,父加载器加载不到再由下一层加载,直到当前类加载器。

  • 全盘机制,是加载的类所依赖的类也由这个类加载器加载。

  • 每一个java应用程序,除了自定义的类加载器,还有扩展类加载器,系统类加载器等,这些类加载器会负责加载自己职责范围的类。

  • 纯手敲,如还有疑问,欢迎交流,
    如有帮助,请采纳,十分感谢!

上面已经给出这两个机制的文档,好好看看吧,看了都还不懂再问吧

首先来说说Classloader,类加载包括:引导类加载器,扩展类加载器,系统类加载器,自定义加载器他们分别加载的范围,已经分类,主要分为两类加载器,一种是不是java编写的,一种是java编写的

引导类加载器: 不是java编写的 c编写的加载器,所有我们在代码中是获取不到的,是最顶层的加载器:

这里就是获取到的就是null,范围:java javax,sun下的包都是用他进行加载

扩展类加载器: 负责 rt.jar下面类的加载器 ExtClassloader

系统类加载器:自己创建的类的加载器 appClassloader

现在我们来说说机制,理解机制就知道了类加载是怎么回事了。
双亲委派机制

双亲委派机制:通俗的说就是先委托父类进行加载,父类加载不到时,在向上委托,一直到引导类加载器都加载不到时,在由自己去进行加载。

这里,大家可以去试试,在当前项目中新建一个 java.lang包下面新建一个String类,然后你在引用的时候,会发现他不会使用 我们新建的String类?

全盘委托负责机制
即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的其它Class通常也由这个classloader负责载入

https://cloud.tencent.com/developer/article/1704968
https://blog.csdn.net/houtianrui/article/details/118856358