和mybatis系列不同的是,在正式開始spring入門時,我們先來了解兩個關於spring核心的概念,ioc(inverse of control)控制反轉和aop()面向切面程式設計。
1.ioc(inversion of control)控制反轉
什麼是控制反轉呢?可以這麼通俗的來解釋,我們通常寫**當乙個類會關聯另乙個類是會直接在這個類裡new,例如:
1package
day_30_spring;23
/**4
* @author
余林豐5*6
* 2023年10月30日7*/
8public
class
people
1718 }
現在我們將物件的控制權「反轉」,交由第三方容器進行管理,即交由spring容器幫我們管理,使得我們不再people**中與eat物件緊耦合。在看下面的**:
1package
day_30_spring;23
/**4
* @author
余林豐5*6
* 2023年10月30日7*/
8public
class
people
1718 }
eat類是繼承至action介面的,這實際上就是通過依賴注入(di,dependency inversion)的方式來實現控制反轉。通過構造方法來注入。不依賴於具體的action介面實現,我們只需要傳遞乙個action介面類進去即可。相比於之前的「傳統」**緊緊的依賴action的具體實現eat類,這個**實際上解了**的耦合性。spring有兩種構造方式,一種就是我們上面說到的構造器注入,另一種就是set方法注入。所以,ioc的很簡單,目的是解耦,手段是通過依賴注入。spring容器幫我們解決了一切。
2.aop(aspect oriented programming)面向切面程式設計
1package
day_30_spring;23
/**4
* @author
余林豐5*6
* 2023年10月30日7*/
8public
class
people
16 }
「單一職責」告訴我們,這樣寫到底好不好呢?日誌記錄是people該做的事嗎?難道它不應該只負責插入資料的操作嗎?正確的做法應該是這麼的在people類中只有這幾句**:
1package
day_30_spring;23
/**4
* @author
余林豐5*6
* 2023年10月30日7*/
8public
class
people
13 }
那我們怎麼在insert方法中先記錄日誌呢?我們可以用動態**來實現,即建立乙個**類的物件例項,spring也已經為我們做好了這件事,僅僅需要配置一下幾句話,即可實現。
1<?
xml version="1.0" encoding="utf-8"
?>
2<
beans
>34
<
aop:config
>
5<
aop:aspect
ref="logger"
>
6<
aop:pointcut
id="insert"
expression
="execution(* *.insert(..))"
/>
7<
aop:befor
point-ref
="insert"
method
="beforeinsert"
/>
8<
aop:after
point-ref
="insert"
method
="afterinsert"
/>
9aop:aspect
>
10aop:config
>
11beans
>
事實上我們能實現最開始我們「糟糕」**的功能了,而且更優美。在這裡我們僅僅對ioc和aop做乙個簡單的了解,在後面會和mybatis一樣,先學會從第一步配置,再學會怎麼用,最後再來了解框架源**原理等等。
Spring入門導讀 IoC和AOP
和mybatis系列不同的是,在正式開始spring入門時,我們先來了解兩個關於spring核心的概念,ioc inverse of control 控制反轉和aop 面向切面程式設計。1.ioc inversion of control 控制反轉 什麼是控制反轉呢?可以這麼通俗的來解釋,我們通常寫...
spring入門之IOC容器
ioc 其思想是反轉資源獲取的方向,傳統的資源查詢方式要求元件向容器發起請求查詢資源,作為回應,容器適時的返回資源 應用ioc後,容器主動地將資源推送給它所管理的元件,元件選擇一種合適的方式來接受資源 di 是ioc的另一種表達方式 即元件以一些預先定義好的方式 例如setter方法 接受來自容器的...
Spring入門(三)之IoC
一 ioc定義 ioc,即控制反轉。開發者在使用類的例項之前,需要先建立物件的例項。但是ioc將建立例項的任務交給ioc容器,這樣開發應用 時只需要直接使用類的例項,這就是ioc。在討論控制反轉這個概念的過程中,martin fowler提出了乙個更為準確的概念,叫做依賴注入 dependency ...