1.首先classloader是一种tree-like的hierarchy的结构,这颗树的root是bootstrap classloader。当JVM启动后,系统往往会有三个或三个以上的Class Loader,也即:Bootstrap CL, Extension CL, System CL和User-defined CL。任何的CL都有一个parent CL(Bootstrap CL除外),从而所有的CL形成一颗自上而下的树,其中Bootstrap CL是这颗树的Root。
Bootstrap CL
└──Extension CL
└──System CL
└──User-defined CL.(classLoaderA)
└──User-defined CL.(classLoaderB)
2.Bootstrap CL负责载入core Java API class;Extension CL负责载入系统所安装的扩展Java函数库;System CL负责载入Classpath下的class。
3.Class的载入采用的是Delegation的模式,即:当系统向一个CL请求载入某一个class的时候,该CL把请求delegate给他的parent,如果parent返回相应的class,则CL返回parent所返回的class,如果parent返回null的话,则CL自己负责载入请求的class。(weblogic的classloader architecture有一个开关,当你disable那个开关的时候,child CL将不会delegate class-loading到他的parent,这是一个例外)
4.拿你说的那种情况来说,当client向classloaderB请求载入A的时候,classloaderB将会delegate这个请求给classloaderA,既然classloaderA可以返回A,那么classloaderB将会直接返回这个A给client。
Bootstrap CL
└──Extension CL
└──System CL
└──User-defined CL.(classLoaderA)
└──User-defined CL.(classLoaderB)
2.Bootstrap CL负责载入core Java API class;Extension CL负责载入系统所安装的扩展Java函数库;System CL负责载入Classpath下的class。
3.Class的载入采用的是Delegation的模式,即:当系统向一个CL请求载入某一个class的时候,该CL把请求delegate给他的parent,如果parent返回相应的class,则CL返回parent所返回的class,如果parent返回null的话,则CL自己负责载入请求的class。(weblogic的classloader architecture有一个开关,当你disable那个开关的时候,child CL将不会delegate class-loading到他的parent,这是一个例外)
4.拿你说的那种情况来说,当client向classloaderB请求载入A的时候,classloaderB将会delegate这个请求给classloaderA,既然classloaderA可以返回A,那么classloaderB将会直接返回这个A给client。