Java的双亲委派模型:
Java的ClassLoader除了Bootstrap ClassLoader外,每个ClassLoader都有一个parent的ClassLoader,沿着parent最终会追索到Bootstrap ClassLoader;当一个ClassLoader要加载一个类时,会首先委派给parent,如果parent能载入这个类,则返回,否则这个ClassLoader才会尝试去载入这个类。
代码验证:
public class Test {
public static void main(String[] args) {
//获得加载Test.class这个类的类加载器
ClassLoader loader = Test.class.getClassLoader();
while(loader != null) {
System.out.println(loader);
//获得父类加载器的引用
loader = loader.getParent();
}
System.out.println(loader);
}
}
sun.misc.Launcher$AppClassLoader@18b4aac2
sun.misc.Launcher$ExtClassLoader@4c75cab9
null
Groovy的类加载机制
同上,我们先从代码层面观察下:
class GroovyTest {
def print(){
println "test"
}
}
public class Test {
public static void main(String[] args) {
try {
Class clazz = new GroovyClassLoader().parseClass(new File("Gro