您的位置:首页 > 其它

关于DBCP为什么加载了配置文件 直接一个getConnection就获得了连接对象呢 ?

2017-12-13 12:43 281 查看
纯属自己个人理解 如果有错误 欢迎指出

我们看到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方法 就可以获得对象了 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐