IOC(控制反轉)
下面是多個針對此理解的表達。
- 一個對象A依賴另一個對象B就要自己去new 這是高度耦合的 IOC容器的使用。
比如在B中使用A很多,哪一天A大量更改,那么B中就要修改好多代碼。 - 通俗的理解是:平常我們new一個實例,這個實例的控制權是我們程序員,而控制反轉是指new實例工作不由我們程序員來做而是交給spring容器來做。
- 針對一個接口,我們可能會寫多個實現類,如果在代碼中、程序中對實現類的對象進行創建,當想更換實現類時(使用其他的實現類),就需要對代碼進行更改。
-
一個使用實例
通過spring的IOC功能,在xml配置文件中,給接口的實現類起一個名字“XXX”,代碼中創建對象時,使用以下方式創建:
DI(Dependency Injection,依賴注入)
首先應該明白兩個問題:1,誰依賴誰;2,誰注入,注入什么?
- 1
- 2
- 利用xml的配置信息,在客戶端代碼中不用具體new任何的java對象了,java對象的創建工作,和對象中元素的賦值工作可以交給xml(spring)處理。
- 回答文中開頭兩個問題:1.客戶端代碼中,具體對象的創建依賴於xml文件(spring,即IOC容器);2.是IOC容器注入,在運行期,根據xml的配置信息,將具體的對象注入到相應的bean中。
JavaBean:為了寫出方便他人使用的類,於是規定,必須有一個零參的構造函數,同時還要用get/set方法,以便隱藏內部細節,方便使用和之后的代碼更新。
- 針對一個JavaBean,為了使用它,首先需要new一個對象,之后需要對其中的set方法進行調用進而賦值。代碼之間的聯系變得很大,封裝的特性漸漸變小。這樣在修改代碼時,就麻煩了。要成堆的更改,尤其是在不同團隊分工開發的過程中,代碼變更影響巨大。
- 通過控制反轉(IOC)、依賴注入,new的同一種對象,在xml文件中都給他起一個小名,這樣更改時只需要在xml文件中,將小名對應的類的具體路徑更改了。不需要一個個.java文件替換。
- 在使用set方法傳值時,如果針對具體的屬性值,進行填寫,更改起來也會麻煩一些,通過Spring來進行賦值,更改起來更加方便。
注:關於set方法傳值,以及具體的操作方法好像有多種,具體理解不夠,需要實際編碼以及通過專業書籍系統學習。2017.1.3
面向切面AOP
可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術。
- 1
- 2
- 將日志記錄,性能統計,安全控制,事務處理,異常處理等代碼從業務邏輯代碼中划分出來