关于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方法 就可以获得对象了
我们看到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方法 就可以获得对象了
相关文章推荐
- (1) 写一个 Properties 格式的配置文件,配置类的完整名称。 * (2) 写一个程序,读取这个 Properties 配置文件,获得类的完整名称并加载这个类,用 反射 的方式运行
- 关于字符编码、对象传递、文件传递、字符串传递、 TcpClient、TcpListener的又一个应用
- asp.net连接sql2005,cs文件里直接书写的代码,纯手工操作,不在web.config里面进行配置。
- 编写一个文件,读取 src 下面day12包 下面的my.properties 文件,文件内容如下, className=day12.User 结合 IO、反射知识,完成 配置文件中对象的创建和方法调用。并编写方法,列举出 Student 类中所有的属性、
- 关于《创建组件**失败。错误消息为**未能加载文件或程序集**或它的某一个依赖。系统找不到指定文件。》的解决方案
- 关于VS2008单元测试中加载配置文件的问题
- 关于“未能加载文件或程序集“System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统找不到指定的文件”
- 关于《Orange'S》第二章bochs配置文件的一个小问题
- 关于未能加载文件或程序集“Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或它的某一个依赖项。试图加载格式不正确的程序的解决方案
- 关于struts2中自动加载模块的struts2的配置文件解决方案
- 关于数据库连接及其配置文件,驱动报错
- 关于Assembly.CreateInstance中被启动对象读取配置文件的问题
- 水晶报表 关于错误未能加载文件或程序集“CrystalDecisions.ReportAppServer.ClientDoc”或它的某一个依赖项。试图加载格式不正确的程序
- 64位系统 IIS7.0配置.net网站时报错:未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。
- 关于 未能加载文件或程序集“ImageMagickNet”或它的某一个依赖项。试图加载格式不正确的程序 的解决办法
- web.xml 文件中一般包括 servlet, spring, filter, listenr的配置。那么他们是按照一个什么顺序加载呢?
- C++Builder学习笔记5.1(连接数据库,读写配置文件,加载DLL)
- [转]C# 多个项目共享配置文件(共用一个SQL连接字符串)
- 关于VS2008单元测试中加载配置文件的问题
- 如何获得配置文件中,连接数据库的连接字符串