纯属自己个人理解 如果有错误 欢迎指出
我们看到DataSource对象的创建是由BasicDataSourceFacto的createDataSource(配置文件)方法创建的
然后通过源代码我们发现 就拿加载驱动来说 其他的加载是一样的
首先源代码是这样的
value = properties.getProperty(PROP_DRIVERCLASSNAME);
if (value != null) {
dataSource.setDriverClassName(value);
}
这时候我们就可以知道value是配置文件中 驱动的值 就比如是com.mysql.jdbc.Driver
然后调用工厂的创建DataSource的方法 ,在这个方法里面创建一个BasicDataSource的对象
然后通过DataSource对象(也就是BasicDataSource的对象)的setDriverClassName()方法来设置
public synchronized void setDriverClassName(String driverClassName) {
if ((driverClassName != null) && (driverClassName.trim().length() > 0)) {
this.driverClassName = driverClassName;
}
else {
this.driverClassName = null;
}
this.restartNeeded = true;
而.driverClassName是的BasicDataSource一个字段 ,里面包含了很多东西 比如连接池最大对象数 对象密码,驱动名字之类的
这就把所有的东西配置好了 获得了全部加载好的连接池 记住这里的连接池对象只是字段什么都设置好了
但是要获得Connection对象 是通过getConnection方法来获得的
他调用的getCOnnection()底层是怎么实现的呢
1:点击getConnection 我们发现是createDataSource().getConnection();
2点击createDataSource 我们发现他调用了一个对象工厂createConnectionFactory这个方法 而这个方法是BasicDataSource的其中一个方法
3上面我们看到 之前加载的时候就已经把这个类里面的字段什么都设置好了 ,而这个方法就是初始化jdbc程序 也就是连接数据库
4之后调用getConnection方法 就可以获得对象了