| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 【Code皮皮虾】带你盘点双亲委派机制【原理、优缺点】,以及如何打破它? -> 正文阅读 |
|
[Python知识库]【Code皮皮虾】带你盘点双亲委派机制【原理、优缺点】,以及如何打破它? |
文章目录🌊前言
什么是双亲委派机制?说到双亲委派机制,那么我们需要先了解Java中的类加载器! 🌊Java中的类加载器主要分为以下四类:
双亲委派机制原理
优点
缺点
打破双亲委派机制?打破双亲委派机制? 小伙伴:我看这双亲委派机制挺好的啊,为什么要打破呢。 皮皮虾:哈哈,那就直接上实例讲解叭。😉 前提知识:线程上下文类加载器线程上下文类加载器(context class loader)是从 JDK 1.2 开始引入的。Java.lang.Thread中的方法 Java 应用运行的初始线程的上下文类加载器是应用类加载器,在线程中运行的代码可以通过此类加载器来加载类和资源。
双亲委派出现之前由于 自定义类加载器加载一个类需要:继承ClassLoader,重写findClass,如果不想打破双亲委派模型,那么只需要重写findClass;如果想打破双亲委派模型,那么就重写整个loadClass方法,设定自己的类加载逻辑 JDBC打破双亲委派机制使用SPI机制创建数据库链接
代码执行之前,DriverManager会先被类加载器加载,因为java.sql.DriverManager类是位于rt.jar下面的 ,所以他会被启动类加载器加载。 类加载时,会执行该类的静态方法。其中有一段关键的代码是:
这段代码,会尝试加载classpath下面的所有实现了Driver接口的实现类。 那么,问题就来了。 DriverManager是被启动类加载器加载的,那么在加载时遇到以上代码,会尝试加载所有Driver的实现类,但是这些实现类基本都是第三方提供的,第三方的类不能被启动类加载器加载。 那么,怎么解决这个问题呢? 于是,就在JDBC中通过引入ThreadContextClassLoader(线程上下文加载器,默认情况下是AppClassLoader)的方式来使用应用程序类加载器 破坏了双亲委派原则。 我们深入到ServiceLoader.load方法就可以看到:
TomcatTomcat是web容器,那么一个web容器可能需要部署多个应用程序。 不同的应用程序可能会依赖同一个第三方类库的不同版本,但是不同版本的类库中某一个类的全路径名可能是一样的。
所以,Tomcat破坏双亲委派原则,提供隔离的机制,为每个web容器单独提供一个WebAppClassLoader加载器。 Tomcat的类加载机制:为了实现隔离性,优先加载 Web 应用自己定义的类,所以没有遵照双亲委派的约定,每一个应用自己的类加载器——WebAppClassLoader负责加载本身的目录下的class文件,加载不到时再交给CommonClassLoader加载,这和双亲委派刚好相反。
如何打破双亲委派机制?1.自定义类加载器自定义类加载器加载一个类需要:继承ClassLoader,重写findClass,如果不想打破双亲委派模型,那么只需要重写findClass;如果想打破双亲委派模型,那么就重写整个loadClass方法,设定自己的类加载逻辑 想要打破即重写的时候让自己去加载不让父加载器去加载 2. 使用线程上下文类加载器
💖福利
🌊 Java入门到就业学习路线规划
🌊 小白快速入门Python爬虫路线
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 17:53:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |