Spring學習筆記(IOC,DI和AOP)

IOC: Inversion of Control,控制反轉, 控制權從應用程序轉移到框架(如IOC容器),是框架共有的特性。

對於IOC的理解,可以把IOC看作是一個生產和管理bean對象的容器。原本程序中我們要手動自己創建(new)的對象統統交給Spring的IOC容器幫我們創建。同時這就意味着,要產生的單例的bean,這個對象的生命週期也是有IOC容器管理。

Spring中IOC的三種實現方式:

1.屬性注入,或叫做set方法注入;
2.構造方法注入;
3.註解注入,可能因爲方便的原因,這種方式免去了臃腫的配置,所以比較常用。

Spring的有點主要是根據IOC和AOP實現的,之前有簡單提到AOP的實現思想,這些都是針對工廠模式和代理模式的友好封裝。IOC主要解決了代碼的高度耦合問題,AOP將面向切面的編程思想做出了最好的解釋和應用。

這裏順帶簡單解釋一下Spring中的IOC,DI,AOP:

       IOC就是控制反轉,通俗的說就是我們不用自己創建實例對象,這些都交給Spring的bean工廠幫我們創建管理。這也是Spring的核心思想,通過面向接口編程的方式來是實現對業務組件的動態依賴。這就意味着IOC是Spring針對解決程序耦合而存在的。在實際應用中,Spring通過配置文件(xml或者properties)指定需要實例化的java類(類名的完整字符串),包括這些java類的一組初始化值,通過加載讀取配置文件,用Spring提供的方法(getBean())就可以獲取到我們想要的根據指定配置進行初始化的實例對象。

       AOP就是將程序功能中的頻繁出現或者與主業務邏輯代碼相關度不高的代碼抽離出來,通過切面編程的方式在想要調用的時候引入調用的思想。而這種思想並不是只限於Spring和java,AOP(面向切面)和OOP(面向對象)一樣都是一種編程思想,這種思想的實現機制在Spring中便是應用了java的動態代理和java的反射。在實際編程中,我們通常會遇到一些交叉業務邏輯(比如:日誌,事務,安全等等),這是我們就可以封裝一個封面,然後注入到目標對象(具體的業務邏輯)中去。ps:很多方法都會拋出異常信息,這是我們就可以寫一個攔截器,在這個類中實現記錄錯誤日誌的功能,再在Spring的xml配置文件中配置一個對這些要記錄日誌的方法的AOP攔截器,在這個方法執行後調用這個攔截器來記錄日誌。這樣就不用每次拋出異常都要手動的去單獨處理記錄,提高了程序的內聚性。這種在調用某個方法之前/後想要自動執行一系列自定義操作的就是AOP思想。
總結:

IOC即控制反轉,一種將控制權轉移的設計模式,由傳統的程序控制轉移到容器控制;

DI即依賴注入,將相互依賴的對象分離,在Spring的配置(註解)中描述它們之間的依賴關係,這些依賴關係也只在使用時才被建立。

AOP即面向切面,一種編程思想,OOP的延續。將系統中非核心的業務提取出來,進行單獨處理。

Spring的AOP和IOC都是爲了解決代碼的耦合度的實際應用,使得代碼的重用度變高,便於維護。但這些都不是Spring中特有的,我們可以說Spring將它們應用的更靈活。

spring的優點
①IOC和DI降低了組件之間的耦合性 ,讓程序員更專注於業務邏輯

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

③spring對於主流的應用框架提供了集成支持,如hibernate,mybatis,Struts等

④spring屬於低侵入式設計,代碼的污染極低

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

⑥創建對象默認是單例的,不需要再使用單例模式進行處理

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

⑧Spring能夠幫助我們真正意義上實現針對接口編程。

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

   原文鏈接:https://blog.csdn.net/qq_36071795/article/details/83792071

原文鏈接:https://www.cnblogs.com/ldy-blogs/p/8479013.html

原文鏈接:https://www.cnblogs.com/java-263/p/9982422.html

原文鏈接:https://www.jianshu.com/p/9cb11d34f242

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章