1. 程式人生 > >spring基礎概念1

spring基礎概念1

一,什麼是控制反轉?
控制反轉是容器裝配元件的一種模式,即IOC,Martin Fowler深入探索了“控制反轉”的工作原理,併為其起了一個新的名字“依賴注入”,即DI。
但從字面上很難理解“控制反轉”所表達的含義,其實在程式設計時,開發人員常說的“實現必須依賴抽象,而不是抽象依賴實現”就是“控制反轉”的一種表現方式。
通過IOC來實現業務邏輯從資料庫中取資料的問題可能有3種:
1.從SQL Server資料庫中取資料
2.從DB2資料庫中取資料
3.從Oracle資料庫中取資料。
二,舉例說明為什麼要通過從IOC來實現業務邏輯從資料庫中取資料?
(1)以從SQL Server資料庫中取資料為例具體步驟如下:
1.先編寫一個從資料庫中取資料的類SqlServerDataBase.java
這裡寫圖片描述


2.業務邏輯類Business.java通過SqlServerDataBase.java中的方法從SQL Server資料庫中取資料。
這裡寫圖片描述
以上程式編寫的不足:Business類依賴於SqlServerDateBase類,如果業務改變,使用者要求從DB2或Oracel資料庫中 取資料,則這個程式就不適用了,必須要修改Business類。
(2),以從DB2資料庫中取資料為例,具體步驟如下:
1.編寫一個從DB2資料庫取資料的類DB2DataBase類這裡寫圖片描述
2.因為改為從DB2資料庫中取資料,所以業務邏輯類Business.java通過DB2DataBase.java中的方法從DB2資料庫中取資料。
這裡寫圖片描述

這裡寫圖片描述
(3)同樣這時,使用者要求從Oracle資料庫中取資料,這個程式就不適用了,方法也如上
這裡寫圖片描述
這裡寫圖片描述
得出的總結:這不是一個好的設計,因為每次業務需求的變動都需要程式的大量修改,我們可以通過IOC來解決這個問題,它可以通過面向抽象程式設計來改變這種情況。

通過IOC來實現這個功能的具體步驟如下:
1.編寫獲取資料的介面DataBase
這裡寫圖片描述
2.編寫一個從SQL Server資料庫中取資料的類SqlServerDataBase,該類實現了介面DataBase
這裡寫圖片描述
3.編寫一個業務邏輯類Business,該類只針對DataBase編碼,而不是針對實體類。
這裡寫圖片描述
4.編寫測試類TestBusiness
這裡寫圖片描述


通過這種方式Bussiness類就可以得到重用,不管從哪個資料庫中獲取資料,Business類都不需要改動,只需要實現具體的DataBase介面即可。
例如,使用者要求改為從DB2資料庫中獲取資料,只需要實現一個具體負責從DB2資料庫中取資料的類就可以了。
5.編寫具體負責從DB2資料庫中取資料的類DB2DataBase,該類實現了介面DataBase
這裡寫圖片描述
6.業務邏輯類Business不用做任何的改動,只需修改測試類TestBusiness
這裡寫圖片描述
如果使用者又要求改為從Oracle資料庫中獲取資料 ,方法如上。
總結:通過介面來程式設計,實現了控制反轉,並且使程式碼獲得了重用,這也就是所說的“實現必須依賴抽象,而不是抽象依賴實現”。以上的例子就是採用Set注入的方式。