当前位置: 首页 > news >正文

广州哪里有学做网站的网站建设 慕课

广州哪里有学做网站的,网站建设 慕课,html网页制作大作业范例,wordpress+手机站🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 JVM 打破双亲委派机制(JDBC案例…

在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


JVM

  • 打破双亲委派机制(JDBC案例)
    • 问题1:DriverManager怎么知道jar包中要加载的驱动在哪?
      • SPI机制
    • 依据代码调试演示DriverManager加载驱动jar包
      • 1.基础JDBC代码
      • 2. 初始化
      • 3. 加载所有jar包中的驱动
    • 问题2:SPI中是如何获取到应用程序类加载器的?
      • 获取当前类的上下文的类加载器

打破双亲委派机制(JDBC案例)

JDBC的这个框架的目的是在Java中操作数据库,在他的设计的核心思想中不希望出现具体的数据库的语法,提高它的泛用性,将来对接任何数据库都会比较容易,在JDBC中,设计了一个DriverManager的类,这个类会去管理在jar包中的引入的数据库的驱动,比如要使用mysql数据库,那么就会添加一个mysql的驱动jar包,DriverManager会负责把驱动jar包加载进来,这样就可以连接mysql的数据库了,要想连接其他类型的数据库,只需将jar包替换成其他数据库的即可,这样DriverManager就可以对接不同的数据库,并且在代码方面是统一的,但是在DriverManager去加载驱动jar包的类的过程中打破了双亲委派机制:

DriverManager这个类是jdk自己提供的,位于rt.jar这个jar包中,所以这个类就会由启动类加载器加载,而mysql的驱动jar包是由应用程序类加载器加载的,当启动类加载器加载完DriverManager类后,又将DriverManager委派给应用程序类加载器去加载mysql的驱动jar包,这就违反了双亲委派机制


在这里插入图片描述


问题1:DriverManager怎么知道jar包中要加载的驱动在哪?

SPI机制

  • spi全称为Service Provider Interface ,是JDK内置的一种服务提供发现机制
  • spi工作原理:

以jdbc连接数据库为例:

  • 1.在ClassPath路径下的META-INF/services文件夹中,以接口的全限定名来命名文件名,对应的文件里写该接口的实现,这个文件的名字就是当前驱动实现的接口,DriverManager都是实现了这个接口的,才会认为它是一个数据库驱动,所以mysql的jar包的驱动也实现了这个接口,在文件的内部就需要写上需要暴露的接口的的实现类,比如mysql某个版本的驱动就是com.mysql.jdbc.Driver
  • 2.此时DriverManager就可以去拿到当前的实现类的类名,并且用类加载器加载,在spi机制中提供了一个类ServiceLoader,只需把想要的接口的名字传入即可,接下来会有一个加载器,这个加载器就可以使用迭代器拿到当前的类名并且创建这个对象
    ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);

在这里插入图片描述


依据代码调试演示DriverManager加载驱动jar包

1.基础JDBC代码

public class JDBCExample {static final String JDBC_DROVER = "com.mysql.cj.jdbc.Driver";static final String DB_URL = "jdbc:mysql:///demo1";static final String USER = "root";static final String PASS = "123456";public static void main(String[] args) {Connection coon = null;Statement stmt = null;try {coon = DriverManager.getConnection(DB_URL,USER,PASS);stmt = coon.createStatement();String sql = "select name,author from book";ResultSet r = stmt.executeQuery(sql);while (r.next()) {System.out.print("name: " + r.getString("name"));System.out.print("author: " + r.getString("author") + "\n");}stmt.close();coon.close();} catch (SQLException e) {e.printStackTrace();}}
}

2. 初始化

static {loadInitialDrivers();println("JDBC DriverManager initialized");
}

3. 加载所有jar包中的驱动

  • 核心代码:
public Void run() {ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);Iterator<Driver> driversIterator = loadedDrivers.iterator();try{while(driversIterator.hasNext()) {driversIterator.next();}} catch(Throwable t) {// Do nothing}return null;
}

在这里插入图片描述


在这里插入图片描述


问题2:SPI中是如何获取到应用程序类加载器的?

  • SPI中使用了线程上下文中保存的类加载器进行类的加载,这个类加载器一般是应用程序类加载器。

获取当前类的上下文的类加载器


在这里插入图片描述


http://www.15wanjia.com/news/188117.html

相关文章:

  • 服装公司网站网页设计软件定制开发费用
  • 男女生做羞羞事情的网站天津响应式网站
  • 网站维护好的方法快速搭建网站软件
  • 网站单个页面紧张搜索引擎蜘蛛封面型网站怎么做的
  • 重庆专业网站营销用frontpage怎么做网页
  • 公司网站开发费账务处理姜堰网络推广怎么做
  • 简单的企业网站php东莞网络公司哪家最好
  • seo批量建站方法微信营销成功的案例有哪些
  • 蓟州区建设银行官方网站官方网站建设ppt
  • 可以用来做视频网站的视频外链吗网络营销方式选择考虑的因素
  • 电脑和手机都能浏览的网站开发濮阳市建设工程交易网
  • 横翻网站模版湛江网站设计公司
  • 专门做logo的网站做微信小程序的网站
  • 自动发卡网站开发织梦做小游戏网站
  • 如何自建网站服务器做游戏直播什么游戏视频网站好
  • 购物网站那个信用好又便宜html模板素材
  • 公众号江苏建设信息网站wordpress建站教程 贴吧
  • 阿里巴巴官方网站站长做旅游网站
  • 学网站开发多少钱微网站站点名称
  • 做网站微信朋友圈应该怎么发如何实现一个制作好的网站
  • inititle 网站建设站群 网站如何做
  • 最大的搜索网站排名网站备案后应该做什么
  • 移动网站开发环境 主流域名批量注册查询
  • 新手建网站什么类型好域名备案查询网站备案信息查询
  • 城市门户网站.net网站开发教程百度贴吧
  • 安卓做网站教程家居网站建设基本流程
  • 大气网站首页搜索引擎营销的内容
  • 商城网站静态模板下载营销型网站建设优化建站
  • 开个人网站如何赚钱建设龙卡e付卡网站
  • 做网站要学什么知识自贡建设投资有限公司网站