1. 程式人生 > >Spring的IOC,DI和AOP(不看後悔,一看必懂)

Spring的IOC,DI和AOP(不看後悔,一看必懂)

spring的優點

①IOC和DI降低了元件之間的耦合性 ,讓程式設計師更專注於業務邏輯

②容器提供了眾多的輔助類,能加快應用的開發

③spring對於主流的應用框架提供了整合支援,如hibernate,mybatis,Struts等

④spring屬於低侵入式設計,程式碼的汙染極低

⑤容器提供了AOP技術,利用它可以方便的實現許可權攔截等功能

⑥建立物件預設是單例的,不需要再使用單例模式進行處理

⑦使用Spring構建的應用程式易於單元測試。

⑧Spring能夠幫助我們真正意義上實現針對介面程式設計。

spring的IOC和DI

在傳統的程式開發中,一個類如果需要用到另外一個類的功能,常常採用組合(也就是new 物件)或者使用工廠方法(工廠方法最終也是需要new) 的方式。這樣類與類之間的耦合度變高了。

IOC(Inversion of Control)控制反轉,DI(Dependency Injection)依賴注入,其實兩者本質上是沒有區別的

例如:在A類中呼叫B類的方法,那麼我們就稱 A依賴B,B為被依賴(物件),相信這點大家能夠理解。

在spring中,B的例項物件被看成Bean物件,這個Bean物件由spring容器進行建立和管理,如此一來,A獲取B的例項物件就不是由自己主動去獲取,而是被動接受spring給它設值,那麼,這個主動變為被動,就可以理解為“控制反轉”。

而另一種說法,從spring容器的角度上看,它負責把A的依賴物件B(B是被依賴物件)注入給了A,所以我們可以理解為“依賴注入”

達到的效果:

你只需要在spring配置檔案總配置相應的bean,以及設定相關的屬性,讓spring容器來生成類的例項物件以及管理物件。在spring容器啟動的時候,spring會把你在配置檔案中配置的bean都初始化好,然後在你需要呼叫的時候,就把它已經初始化好的那些bean分配給你需要呼叫這些bean的類。

 

依賴注入的兩種方式:

set方法注入和有參構造注入

IOC和DI的優點

降低了元件間的耦合度,增強了可維護性和複用性

 

IOC的底層原理

工廠模式+反射  可以採用dom4j來解析xml配置檔案

我們可以把IOC容器的工作模式看做是工廠模式的昇華,可以把IOC容器看作是一個工廠,這個工廠裡要生產的物件都在配置檔案中給出定義,然後利用程式語言的的反射程式設計,根據配置檔案中給出的類名生成相應的物件。從實現來看,IOC是把以前在工廠方法裡寫死的物件生成程式碼,改變為由配置檔案來定義,也就是把工廠和物件生成這兩者獨立分隔開來,目的就是提高靈活性和可維護性。

spring的aop

aop的使用場景

 

AOP,面向切面程式設計,不用修改原始碼就可以擴充套件功能,底層使用動態代理實現

 

AOP中有三個重要的部分:

切入點(即類中實際增強的方法,aspectj可以和spring一起進行aop操作,可以通過在spring配置檔案中使用表示式來配置切入點)

增強(又稱為通知,訊息)擴充套件的功能稱為增強,通知包括前置通知,在方法之前執行,後置通知,在方法之後通知,異常通知,方法出現異常時通知,最終通知,在後置通知之後執行,環繞通知,在方法之前之後通知)

切面,切入點和增強的結合,就是把增強應用到具體方法上面的過程.

2 常用的表示式

execution(<訪問修飾符>?<返回型別><方法名>(<引數>)<異常>)   -->訪問修飾符可以為public,protected和private

(1)execution(* cn.itcast.aop.Book.add(..))  -->(..)表示可以有引數

(2)execution(* cn.itcast.aop.Book.*(..))

(3)execution(* *.*(..))

(4) 匹配所有save開頭的方法 execution(* save*(..))

 

spring aop的使用方法①配置檔案②使用註解(不太瞭解)