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