2
在java中是获取不到BootstrapClassLoader这个加载器的, ClassLoader.getSystemClassLoader().getParent() 获取到的是sun.misc.Launcher$ExtClassLoader这个加载器。
在java中是获取不到BootstrapClassLoader这个加载器的, ClassLoader.getSystemClassLoader().getParent() 获取到的是sun.misc.Launcher$ExtClassLoader这个加载器。
原来的注释是正确的,spy jar 是 append 到 bootstrap classloader里的。 的确 bootstrap classloader在代码里是获取不到的,所以用 ExtClassLoader 来尝试加载,它会通过 bootstrap classloader 来尝试加载 spy class。
通过作者指点,这段代码应该是这样的含义:
第一次没加载的时候,获取到ExtClassLoader,他向上委托,但Bootstrap发现这个路径不该我来加载,所以就轮到ExtClassLoader自己,同理他自己也不会加载。 因此会走到下面的逻辑由Instrumentation强制Bootstrap加载,因为父加载的可以对子加载器可见,那么下次就可以通过ExtClassLoader.loadClass拿到对应的Class实例
受教了😄😄😄