Spring關於druid使用注入的深度理解
在eclipse使用Druid時,我們都是通過DruidDataSourceFactory的createDataSource(Properties p)方法建立 dataSource;
而在Spring依賴注入(DI) (如下邊) DataSource物件時,用的卻是DruidDataSource,而
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="root"/> 很明顯是set注入,在DruidDataSource裡是沒有setUsername等方法的,而且
有的話又是如何實現呢?
測試
<!--Dbutils 通過構造器注入-->
<bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner">
<constructor-arg name="ds" ref="dataSource"/>
</bean>
<!--DruidDataSource set注入-->
<!--
去DruidDataSource找setUsername等 該類繼承了DruidAbstractDataSource,
實際呼叫的是DruidAbstractDataSource裡邊的set方法,
建立dataSource物件,
這個過程具體如何實現?
猜測: Spring反射機制,有了這些引數後,建立物件時會自動呼叫,包括factory的create,也是將Properties物件引數載入,建立是呼叫
驗證: 正確
對於DruidDataSourceFactory,呼叫createDataSource(Properties p),該方法呼叫createDataSource(Map properties)
,會用一個config方法配置屬性,在config方法拿到Properties的username等屬性後,呼叫DruidDataSource的setUsername方法,
後面內容也就同上,在DruidDataSource類的setUsername方法為父類DruidAbstractDataSource的
-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="url" value="jdbc:mysql://localhost:3306/dabenmanager"/>
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
</bean>
總結:我們不管是使用DruidDataSourceFactory的create…方法傳入Properties物件,還是DruidDataSource直接設定相關屬性,最後都會將獲取的值傳入
DruidAbstractDataSource裡。後邊建立流程相同,只是方法不同,那麼寫工具類時一般用工廠,Spring注入時考慮DruidDataSource直接設定屬性。
擴充套件:Spring 獲取DataSource時,也應該可以先獲取工廠物件,後通過普通工廠或工廠的靜態方法來獲取
相關文章
- 關於Spring的bean注入SpringBean
- [spring][讀書筆記]一些關於依賴注入的理解。Spring筆記依賴注入
- Spring Series---@Scheduled使用深度理解Spring
- Spring關於IOC思想的簡要理解Spring
- 對於@Bean注入的新理解Bean
- 深度理解vue 關於陣列和物件的更新Vue陣列物件
- 這幾個關於Spring 依賴注入的問題你清楚嗎?Spring依賴注入
- 關於spring事務原始碼的一些小理解Spring原始碼
- 關於FreeMarker模板注入
- 關於 DOM 的理解
- 關於Vuex的理解Vue
- 關於servlet的理解Servlet
- 關於-this指向的理解
- 關於依賴注入(typescript)依賴注入TypeScript
- Spring方法注入的使用與實現原理Spring
- Spring原始碼深度解析(郝佳)-學習-原始碼解析-基於註解注入(二)Spring原始碼
- 關於協程的理解
- 關於對Host的理解
- 對於Spring中注入物件失敗的問題Spring物件
- Spring學習01--初學者關於AOP和DI的理解Spring
- 關於BFC理解
- 關於Spring中的useSuffixPatternMatchSpring
- 關於Golang中的依賴注入實現Golang依賴注入
- 理解Spring中依賴注入(DI)與控制反轉(IoC)Spring依賴注入
- SpringBoot中關於 HikariPool、Druid及常用連線池的比較Spring BootUI
- 關於使用Spring Boot的Kafka教程 - DZone大資料Spring BootKafka大資料
- spring 的依賴注入Spring依賴注入
- Spring boot學習(四)Spring boot整合DruidSpring BootUI
- 關於BFC的簡單理解
- 新手關於import/export的理解ImportExport
- 關於wsgi協議的理解協議
- 關於rpc的整理和理解RPC
- 關於GAN的個人理解
- 關於決策樹的理解
- 關於ERC721的理解
- 關於count函式的理解函式
- 關於RabbitMQ的簡單理解MQ
- 不用注入方式使用Spring管理的物件中的方法,神奇Spring物件