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使用註解注入bean理解SpringBean
- Spring 依賴注入的理解Spring依賴注入
- Spring Series---@Scheduled使用深度理解Spring
- 對於@Bean注入的新理解Bean
- 深度理解vue 關於陣列和物件的更新Vue陣列物件
- Spring關於IOC思想的簡要理解Spring
- 【Spring】Spring依賴注入與控制反轉理解Spring依賴注入
- 這幾個關於Spring 依賴注入的問題你清楚嗎?Spring依賴注入
- 關於spring事務原始碼的一些小理解Spring原始碼
- 基於註解的spring 在靜態方法中使用注入的類Spring
- Spring Boot使用Druid和監控配置Spring BootUI
- 關於依賴注入(typescript)依賴注入TypeScript
- 關於 DOM 的理解
- 關於Vuex的理解Vue
- 關於servlet的理解Servlet
- 關於-this指向的理解
- 關於DCI的理解
- Spring關鍵詞的理解Spring
- Spring原始碼深度解析(郝佳)-學習-原始碼解析-基於註解注入(二)Spring原始碼
- 關於GAN的個人理解
- 關於協程的理解
- 關於對Host的理解
- 關於SCN的理解(全面)
- 關於scn的理解 (zt)
- Spring方法注入的使用與實現原理Spring
- Spring學習01--初學者關於AOP和DI的理解Spring
- Spring配置使用註解注入beanSpringBean
- 關於BFC理解
- 關於Golang中的依賴注入實現Golang依賴注入
- 監聽器中spring注入相關的問題Spring
- 對於Spring中注入物件失敗的問題Spring物件
- 關於imp和exp的有關理解
- 關於在基於spring的框架中使用static 方法的問題Spring框架
- 關於交叉熵的個人理解熵
- 關於BFC的簡單理解
- 新手關於import/export的理解ImportExport