Beans.xml里定义的dataSource bean:

Java Spring里com.mysql.jdbc.Driver的加载时机

通过调试,发现AbstractApplicationContext的finishBeanFactoryInitialization方法执行完之后,INFO: Loaded JDBC driver: com.mysql.jdbc.Driver就打印了出来:

Java Spring里com.mysql.jdbc.Driver的加载时机

beanFactory.preInstantiateSingletons():

Java Spring里com.mysql.jdbc.Driver的加载时机
Java Spring里com.mysql.jdbc.Driver的加载时机
Java Spring里com.mysql.jdbc.Driver的加载时机

DefaultListableBeanFactory里维护了从Beans.xml里成功解析出的bean 定义:

Java Spring里com.mysql.jdbc.Driver的加载时机

Bean实例成功创建后,进入applyMergedBeanDefinitionPostProcessors:

Java Spring里com.mysql.jdbc.Driver的加载时机

一旦populateBean方法执行完毕之后,Loaded JDBC driver:com.mysql.jdbc.Drive的消息就打印出来了:

Java Spring里com.mysql.jdbc.Driver的加载时机

拿到这个bean的四个属性名称:

Java Spring里com.mysql.jdbc.Driver的加载时机

此处将属性对应的值赋上:applyPropertyValues

Java Spring里com.mysql.jdbc.Driver的加载时机

解析出键值对:

Java Spring里com.mysql.jdbc.Driver的加载时机
Java Spring里com.mysql.jdbc.Driver的加载时机

待设置的属性值为:com.mysql.jdbc.Driver

Java Spring里com.mysql.jdbc.Driver的加载时机

依然是通过反射的方式去设置:

Java Spring里com.mysql.jdbc.Driver的加载时机

待设置值的实例为:org.springframework.jdbc.datasource.DriverManager[email protected]
在第127行进行加载:Class.forName(driverClassNameToUse, true, ClassUtils.getDefaultClassLoader());

Java Spring里com.mysql.jdbc.Driver的加载时机

要获取更多Jerry的原创文章,请关注公众号"汪子熙":
Java Spring里com.mysql.jdbc.Driver的加载时机

相关文章:

  • 2021-08-20
  • 2021-11-28
  • 2022-12-23
  • 2021-12-12
  • 2021-06-04
  • 2021-11-28
猜你喜欢
  • 2021-05-07
  • 2021-08-10
  • 2021-07-25
  • 2021-10-08
  • 2021-09-19
  • 2021-07-10
  • 2021-07-19
相关资源
相似解决方案