BasicDataSourceFactory实现了javax.naming.spi.ObjectFactory接口。
   因此,先从ObjectFactory学习。
  一、ObjectFactory接口
       该接口需要实现方法:getObjectInstance(Object object,Name name,Context namCtx,HashTable<?,?> enviroment)
该方法线程安全,作用为使用本地或引用的特殊信息,创建一个对象。而此类对象的特殊性体现在于具体的环境
(代码中的HashTable入参)。
参数解释: Object:为所创对象提供相关的信息,可为空;
              name:与参数namCtx相关的名字,可为空;
              namCtx:与规定参数相关的上下文内容,可为空;
              environment:被用来创造对象的环境,可为空。

二、BasicDataSourceFactory类

该类一共有3个比较主要的方法,分别为getOjectInstance、createDataSource以及getProperties三个方法。下面具体学习这三个方法。

1、public Object  getOjectInstance(Ojbect object,Name name,Context namCtx,HashTable<?,?> enviroment)方法

该方法主要是实现ObjectFactory提供的抽象方法。其中Object入参必须是Reference类的一个实例,即必须为一个符合Java规范(命名)的Object,同时该参数也必须实现javax.sql.DataSource接口。

此外,该方法还将BasicDataFactory中的一些与数据源(即参数Object对象)相关的参数集合成一个Properties对象;具体的参数会在下文介绍。

获取数据源中的参数及参数值的具体实现过程如下:

Reference(javax.naming.Reference)类有点类似与C语言的指针;当Object被强制转换为一个Reference对象之后,会通过Reference的实例方法get(String propertyName)获取指定的属性值;而此处的属性值,并不是真正的属性值,而是属性值的一个引用值,即一个RefAddr对象,该对象就相当于C语言的指针;如要通过‘指针’获取‘指针指向的内容’时,只需调用RefAddr对象的getContent()方法即可。

如此就获取到指定属性的属性值了。

最后调用createDataSource(Properties properties)方法创建数据源。

2、public static DataSource createDataSource(Properties properties)方法

该方法主要有三个步骤,第一步是new一个新的BasicDataSource对象,第二步根据properties入参,设置该BasicDataSource的一些相关参数;第三步则是将设置好参数的BasicDataSource返回。
3、getProperty(String propText)方法

将格式为key=value;...的字符串解析为Properties实例。在createDataSource方法之中,会调用此方法,将connectionProperties参数(String类型),转化为Properties实例。

三、总结

BasicDataSourceDataFactory主要根据一个实现了DataSource接口的对象,获取该对象的相关数据源配置参数(通过Reference对象,采用类似指针的方法),然后将new一个BaiscDataSource对象,结合获取的参数,形成一个BasicDataSource对象,并将之返回。
————————————————
原文链接:https://blog.csdn.net/xiaogutou1/java/article/details/18465069

BasicDataSourceFactory类简介的更多相关文章

  1. ImageView类简介

    4.8  图片控件 本节将要介绍的是图片控件ImageView,首先对ImageView类进行简单介绍,然后通过一个案例来说明ImageView的用法. 4.8.1  ImageView类简介 Ima ...

  2. Spring Security——核心类简介——获得登录用户的相关信息

    核心类简介 目录 1.1     Authentication 1.2     SecurityContextHolder 1.3     AuthenticationManager和Authenti ...

  3. DriverManager 驱动管理器类简介 JDBC简介(三)

    驱动程序管理器是负责管理驱动程序的,驱动注册以后,会保存在DriverManager中的已注册列表中 后续的处理就可以对这个列表进行操作 简言之,驱动管理器,就是字面含义,主要负责就是管理 驱动 概述 ...

  4. Java基础-日期格式化DateFormat类简介

    Java基础-日期格式化DateFormat类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.DateFormat类概述 DateFormat 是日期/时间格式化子类的抽象 ...

  5. Java基础-StringBuffer类与StringBuilder类简介

    Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后 ...

  6. 34、Collections工具类简介

    Collections工具类简介 就像数组中的Arrays工具类一样,在集合里面也有跟Arrays类似的工具类Collections package com.sutaoyu.Collections; ...

  7. JAVA nio 2 和 Path 类简介

    想要初步了解 NIO.2 API,也就是通常所说的“JSR203: More New I/O APIs for the Java Platform”,最好的切入点就是新的抽象类 java.nio.fi ...

  8. QT中QWidget类简介

    一.详细描述 QWidget类是所有用户界面对象的基类.通俗的来讲,Qt基本上所有的UI类都是由QWidget继承出来的,而QWidget继承于QObject,  大家可以查阅Qt source 即可 ...

  9. Java并发包中CopyOnWrite容器相关类简介

    简介: 本文是主要介绍,并发容器CopyOnWriteArrayList和CopyOnWriteArraySet(不含重复元素的并发容器)的基本原理和使用示例. 欢迎探讨,如有错误敬请指正 如需转载, ...

  10. osg探究补充:DatabasePager类简介

    简介 DatabasePager类,也就是常说的数据库分页技术,简单来说,就是在进行数据库查找时,有可能满足条件的数据很多,为了提高相应速度我们进行数据查找时进行分页查找与显示,当点击下一页时才会进行 ...

随机推荐

  1. .NET 8 + Blazor 多租户、模块化、DDD框架、开箱即用

    前言 基于 .NET 8 的开源项目,主要使用 WebAPI + Blazor 支持多租户和模块化设计,DDD构建.可以帮助我们轻松地搭建起一个功能完善的Web应用程序.除了帮助你快速构建应用程序之外 ...

  2. Namomo Summer Camp 23 Day 1(GCPC2021)

    Namomo Summer Camp 23 Day 1(GCPC2021) Problem B: Brexiting and Brentering 签到 #include<bits/stdc++ ...

  3. 10W数据量导入与现有表数据去重

    使用的是PostgreSQL 在做大数据量(十万级)导入时,某些字段和数据库表里数据(千万级)重复的需要排除掉,把表数据查询出来用程序的方式判断去重效率很低,于是考虑用临时表. 先把新数据插入到临时表 ...

  4. Python开发中,日期时间的相关处理

    在Python开发中,日期和时间处理是一个常见的需求.Python提供了多种模块和方法来处理日期和时间,以下是一些常用的模块和操作.通过介绍一些系统的Python类库以及第三方的类库,我们可以快速的实 ...

  5. 【测试平台开发】——06Flask后端api开发实战(三)——API接口关联数据库

    本章节演示如何创建接口服务,用接口关联数据库数据,包括get请求和post请求. 一.Flask-RESTful插件 restful api是用于在前端与后台进行通信的一套规范.使用这个规范可以让前后 ...

  6. 【Python】之操作鼠标键盘,上传文件,并支持中文

    Mac系统实现操作键盘 Python中模拟键盘和鼠标最著名的模块是:pymouse和pykeyboard.一次安装两个模块比较麻烦,而有一个库整合了这两个模块,而且能支持跨平台操作,这个库叫PyUse ...

  7. vue打包后dist的使用

    发现问题 vue项目完成打包出dist后准备打开index.html,发现居然页面是一片空白,f12一片报红. 分析问题 经过多次网上查询后发现这是由于vue打包时,脚手架会帮你配置好大量参数,但其中 ...

  8. 【YashanDB数据库】YAS-02032 column type is incompatible with referenced column type

    [标题]错误码处理 [问题分类]外键约束创建报错 [关键字]YAS-02032 [问题描述]设置外键约束报错,数据元数据不正确. [问题原因分析]外键字段类型不支持,比如varchar2(64) ,指 ...

  9. Figma 学习笔记 – Constraints 约束

    用途 Constraints 用于 responsive design, 子元素和父元素建立约束关系后, 当父元素 dimension 变换的时候, 子元素会做出相应的变化 (移动位置或 resize ...

  10. QT硬件通讯基础

    QT硬件通讯基础 使用AI技术辅助生成 1 QT与硬件通讯概述 1.1 QT硬件通讯的基本概念 1.1.1 QT硬件通讯的基本概念 QT硬件通讯的基本概念 QT硬件通讯的基本概念 QT作为一种跨平台的 ...