-
jvm之java类加载机制和类加载器(ClassLoader)的详解java类加载机制:全盘负责、双亲委派、缓存机制
-
以JDBC为例谈双亲委派模型的破坏 例子很详细,讲清楚了为什么JDBC会破坏双亲委派模型。
-
b站 类加载机制 实在忘了的话,就看一遍这个吧
-
static+final与final区别,静态常量与常量 static final变量
-
Java基础-关键字final static与类加载分析 final与final static对比
java类加载图解
双亲委派的破坏
参考以JDBC为例谈双亲委派模型的破坏
Class.forName("com.mysql.jdbc.Driver");
调用了Driver类的static块代码。后者调用了DriverManager.registerDriver(new Driver());
在DriverManager
类内:
经过辗转,调用了ClassLoader cl = Thread.currentThread().getContextClassLoader();
,
又辗转作为参数传给c = Class.forName(cn, false, loader);
中的loader。
- 这里,DriverManager是父类,是用BootstrapLoader加载的。而传入的却是线程的加载器(一般默认是AppClassLoader)。
- 这是因为,父类加载器加载的类,在遵循双亲委派时,根据全盘负责定理,只能调用父类加载器来加载。
- 那么,当需要加载子类加载器才能加载的类时,就得破坏双亲委派机制,显式地传入子类加载器。
网友评论