druid

druid

1、this.datasourct =new DruidDataSource();

前者是当前mabtis默认连接池的数据源, 后者是druid连接池的数据源;

2、通过赋值后,当前连接池的数据源就是druid了,通过重写方法,对druid进行init,init是为了程序启动的时候初始化xml里面的配置信息,最后得到返回值,也就是druid数据源了。setproperties方法不需要我们实现吗,那为什么已经赋值过了,在getdatasoucre方法中还要强制转换呢。不是已经赋值了吗。


DruidDataSourceFactory

这个类是在程序启动的时候,程序会对xml配置进行扫描, 当发现连接池设置的时候,进入这个类进行初始化加载吗?

最后:

为什么打断点后会显示10个链接呢阿。有一个是执行的,9个是休眠的,不是应该只显示1个链接吗,为什么运行的时候只显示1个,剩下9个不显示呢



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕阿园 2021-04-30 18:01:36

同学你好,这里取得值并不是赋值成DruidDataSource类型的对象,而是DateSource类型的;这里给同学举个例子,同学可以参考的理解,如下代码中在构造方法中将name的类型赋值为Cat类型了,而取值时取出的是原始的Animal类型,同理,this.dateSource获取的是DateSource类型的

http://img1.sycdn.imooc.com//climg/608bcd0f0967d83405960321.jpg

祝学习愉快~​

  • 提问者 rock221 #1
    那这个赋值起到了什么作用啊
    2021-04-30 18:04:30
  • 提问者 rock221 #2

    多态的体现吗?  druid继承了datasource, 所以这时候还是DataSource对象,对吧??

    2021-04-30 18:29:54
  • 提问者 rock221 #3

    因为底层会完成set的操作, 在重写方法的时候init ,实际还是对datasoure进行初始化,但是内置的信息已经变了, 通过强转,再转回Druid,对吗?不写this.datasourct =new DruidDataSource();底层的set不会实现。 

    2021-04-30 18:34:17
好帮手慕阿园 2021-04-30 15:55:29

同学你好

1、同学理解的是正确的

2、setProperties不需要我们自己手动实现,UnpooledDataSourceFactory类会自动调用setProperties()方法,将xml中的配置赋值到对应的DruidDataSource里相关的属性中

2)this.dataSource取出来的是DateSource类型的,所以这里调用init()方法时需要强转为DruidDataSource

http://img1.sycdn.imooc.com//climg/608ba22f09cbafaf05740114.jpg

3)可以这么理解

3、因为在配置文件中进行了配置,连接池初始链接数为10个,所以显示的是10个连接;debug时程序会进入调式模式,可以看到初始连接数,而使用运行时,程序运行结束,连接关闭,则不会显示多余的连接

http://img1.sycdn.imooc.com//climg/608ba3f909bd7e5604410102.jpg

祝学习愉快~​

  • 提问者 rock221 #1

    this.dataSource取出来的是DateSource类型的,所以这里调用init()方法时需要强转为DruidDataSource,这个this.datasource不是赋值之后的datasource吗?this不是代表当前对象的意思吗。都已经赋值了,怎么取出的是datasource啊。 

    2021-04-30 16:03:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师