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的使用方法①配置檔案②使用註解(不太瞭解)