打破双亲委派机制之线程上下文类加载器
创作时间:
作者:
@小白创作中心
打破双亲委派机制之线程上下文类加载器
引用
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加载完成后,通过初始化阶段触发了驱动类的加载。类的加载过程仍然遵循双亲委派机制。
因此,关于是否打破双亲委派机制这一问题,目前存在争议,读者可以根据自己的理解做出判断。
热门推荐
双色球最新一期开奖:销量近3.9亿,详解6+1玩法
万科股债双杀折射行业困境,专家建议四管齐下稳楼市
八个问题自测:你的购彩行为健康吗?
山西生态保护:山水工程显成效
云冈石窟和平遥古城:山西两张5A级景区新名片
山西最美自然景观打卡攻略:壶口瀑布、太行峡谷、万年冰洞、大同土林
腊肠烹饪全攻略:传统美食的8种创新吃法
王羲之遗留的106句草书口诀,学会这些字,让你真正摆脱“鬼画符”!
汉字“传”的详细解释
历史上最著名的十首劝学诗,句句都是励志名言,激励国人数千年
深圳这些区目标定位有新提法!各区集中释放发展新信号
15岁可以喝酒吗?专家解析未成年人饮酒的危害与应对
“酒精致癌”将被标上瓶身,全球酒类包装警示制度迎来重大变革
电饭煲腊肠焖饭:厨房小白也能做出的美味
从3天到1年:长保面包背后的食品科技与健康考量
冰箱储存有讲究:8大误区+16种变质迹象+28种无需冷藏食品
人与城双向奔赴 城为民增益福祉 2024年深圳城市规划建设管理大事
深圳这些地铁线路预计年内开通!网友晒出“年底路线图”
杭州湾跨海铁路桥开建世界最大80米箱梁
桥梁施工监控技术详解:大型桥梁建设的安全守护者
沪苏湖高铁进入联调联试,浙江交通网络建设全面提速
黑曜石新作《宣誓》试玩前瞻:探索与战斗并重的异世界冒险
怎样学好文言文最高效方法
耦园:苏州唯一一座以爱情为主题的园林
走进《苏州园林》,做一场从前文人梦
甘蔗:2500年药用历史与现代研究新突破
秋冬甘蔗正当时:从功效到食用的全面养生指南
从平仄规则看古诗音律之美
零基础也能学会:古诗创作完全攻略
平仄之美:中国古代诗歌的音律密码