Spring思想學習筆記(一)
Spring是一個面向切面(AOP)和控制反轉的(IOC)的框架
1.IOC控制翻轉,為什麼叫控制反轉呢,因為決定權改變了。
以前是程式設計師作為主導,現在是利用set注入,把決定權交給了使用者。
舉個例子:
我們都知道Spring需要Dao層,Service層。
Dao層放實體,一般是Dao介面和DaoImpl實現類。
Service層放服務,一般是Service介面和ServiceImpl。
Service層呼叫dao層的介面。
現在具體要求來了,我們有三種水果。蘋果,香蕉和桃子。
對應我們就要有fruitDao,AppleIMPL,bananaImpl,peachImpl。
如果不用IOC,我們就需要在Service層的介面寫三個服務,也就是new三個Dao介面
fruitDao apple=new AppleImpl; fruitDao banana=new fruteImpl; fruteDao peach=new fruteImpl;//這是隨便寫的,不能執行哈。
現在是三個水果,以後是不是更麻煩?
麻煩是第一個,當用戶需求更改的時候,使用者說我不喜歡吃蘋果,香蕉和桃子,我需要新的。你是不是還要後續新增,然後修改,根據使用者的變化變化是非常錯誤的。
這時候就想想IOC。
1.我們之前是new一個確定的東西。
2.但是現在我們可以給一個介面fruteDao,fruteDao對應很多的實現類,AppleIMPL,bananaImpl,peachImpl。
3.我們在Service層之前是一個一個new的,現在我們使用一個set方法注入。
public void setFruteDao(FruteDao fruteDao) { this.fruteDao=fruteDao; }
不要小看這個程式碼。
之前寫的三行都可以刪了,寫上這個。
只需要你在Test類或者使用者訪問的那個類裡訪問時呼叫set方法,把想要的那個水果傳入就好了
fruteService.setFruteDao(水果類)
這樣就會把你想要的那個水果傳給service,然後弄個實體,不用new了,也就是把控制權交給使用者了。
以前是使用者要啥,我寫啥,我是手動寫
現在是使用者自己說要啥,然後我站旁邊看。相當於我造了個set注入機器,使用者自己說,機器自動注入new。我就很輕鬆啊。