打破双亲委派机制之线程上下文类加载器
创作时间:
作者:
@小白创作中心
打破双亲委派机制之线程上下文类加载器
引用
CSDN
1.
https://m.blog.csdn.net/m0_68089732/article/details/137674906
线程上下文类加载器
在Java中,线程上下文类加载器(Thread Context ClassLoader)是一种特殊的类加载器,主要用于加载JDBC驱动、JNDI服务等。下面通过一个JDBC案例来说明其工作原理。
JDBC案例分析
DriverManager的使用
在JDBC中,
DriverManager
用于管理项目中引入的不同数据库驱动,例如MySQL驱动和Oracle驱动。以下是使用DriverManager
连接数据库的示例代码:package classloader.broken; import com.mysql.cj.jdbc.Driver; import java.sql.*; public class JDBCExample { static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; static final String DB_URL = "jdbc:mysql:///bank1"; static final String USER = "root"; static final String PASS = "123456"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try { conn = DriverManager.getConnection(DB_URL, USER, PASS); stmt = conn.createStatement(); String sql = "SELECT id, account_name FROM account_info"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("account_name"); System.out.print("ID: " + id); System.out.print(", Name: " + name + "\n"); } rs.close(); stmt.close(); conn.close(); } catch (SQLException se) { se.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (stmt != null) stmt.close(); } catch (SQLException se2) {} try { if (conn != null) conn.close(); } catch (SQLException se) { se.printStackTrace(); } } } }
类加载器分析
DriverManager
类位于rt.jar
包中,由启动类加载器(Bootstrap ClassLoader)加载。项目依赖中的MySQL驱动类由应用程序类加载器(Application ClassLoader)加载。
在
DriverManager
类的初始化代码中,存在一个LoadInitialDrivers
方法,该方法使用SPI机制加载所有实现了Driver
接口的实现类。SPI机制通过在特定位置存放一个文件(文件名是接口名,内容包含实现类的类名)来定位实现类。这个过程使用了线程上下文类加载器(即应用程序类加载器)来加载类并创建对象。
双亲委派机制的讨论
关于JDBC案例是否打破了双亲委派机制,存在不同的观点:
观点一:在《深入理解Java虚拟机》一书中,作者周志明认为这种由启动类加载器加载的类,委派应用程序类加载器去加载类的方式,打破了双亲委派机制。
观点二:从类加载流程的角度分析,JDBC只是在
DriverManager
加载完成后,通过初始化阶段触发了驱动类的加载。类的加载过程仍然遵循双亲委派机制。
因此,关于是否打破双亲委派机制这一问题,目前存在争议,读者可以根据自己的理解做出判断。
热门推荐
Excel格式一致性的八大实用技巧
内衣最佳面料终极指南:9 种选择
石蒜种植指南:从播种到养护的全过程详解
石蒜要怎么种?石蒜的种植技术分享
运费险服务是什么意思?
年羹尧是否有反心:历史解读与辨析
解密:钙与小龙虾养殖
信息网络传播权:定义、范围与保护
信息网络传播权归属于谁:法律视角下的权利归属分析
新四军第一届领导班子,与第二届领导班子的主要成员都有谁?
半导体上市公司业绩集体“出炉”:多家利润飙升 最高增幅超20倍
行业正在回暖:A股半导体公司三季报传递新趋势
如何找到技术创新与人类价值的平衡点?
镇江出发至云南洱海四日深度游全攻略:行程规划、景点推荐与旅行贴士
空包引发的公关危机:茶百道华莱士蜜雪冰城牛约堡等先后回应
车上有小白点如何有效去除?这些去除方法有哪些实际效果?
结婚什么物质条件好呢男方:解析婚姻中的财产分割与家庭责任
夏天喝什么最解渴?不是冰可乐,不是水,而是……
运费诈骗防范指南
人工智能人性化:让机器更懂你
无因管理中的损害赔偿与补偿
初级天文爱好者星空观测完全指南
吃饭时间变一变就能缓解疲劳?饮食一点小改变,身体好处有很多
烟雾病:一种罕见的脑血管疾病
200里路等于多少公里?快速了解距离换算!
中外杰出人物65:开启现代天文学的巨匠哥白尼
春捂秋冻到什么时候?_“春捂”,“捂”到什么时候
练台词的方法:从气息到语感的全面提升
压制日本,055B型驱逐舰,1.7万吨级王牌,到底有多强悍?
055型驱逐舰到底有多强?为什么不去造个100艘呢