IoC(Inversion of Control)
(1).控制反轉(Inversion of Control,英文縮寫為IoC)是框架的重要特征,如果程序員清楚框架和工具箱的差別,可以無視本術語。
可以使用C語言設計框架,因此,IoC并非面向對象編程的專用術語。
Spring的DI/依賴注入(Dependency Injection,簡稱DI)僅僅是一個工具箱,因此與IoC沒有關系。
(2). 在Spring的工作方式中,所有的類都會在spring容器中登記,告訴spring這是個什么東西,你需要什么東西,然后spring會在系統運行到適當的時候,把你要的東西主動給你,同時也把你交給其他需要你的東西。所有的類的創建、銷毀都由 spring來控制,也就是說控制對象生存周期的不再是引用它的對象,而是spring。對于某個具體的對象而言,以前是它控制其他對象,現在是所有對象都被spring控制,所以這叫控制反轉。
(3). 在系統運行中,動態的向某個對象提供它所需要的其他對象。
(4). 依賴注入的思想是通過反射機制實現的,在實例化一個類時,它通過反射調用類中set方法將事先保存在HashMap中的類屬性注入到類中。 總而言之,在傳統的對象創建方式中,通常由調用者來創建被調用者的實例,而在Spring中創建被調用者的工作由Spring來完成,然后注入調用者,即所謂的依賴注入or控制反轉。 注入方式有兩種:依賴注入和設置注入; IoC的優點:降低了組件之間的耦合,降低了業務對象之間替換的復雜性,使之能夠靈活的管理對象。
IoC可以認為是一種全新的設計模式,但是理論和時間成熟相對較晚,并沒有包含在GoF中。
AOP(Aspect Oriented Programming)
在軟件業,AOP意為:面向切面編程,通過預編譯方式和運行期間動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,是軟件開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生范型。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。
(1). AOP面向方面編程基于IoC,是對OOP的有益補充;
(2). AOP利用一種稱為“橫切”的技術,剖解開封裝的對象內部,并將那些影響了 多個類的公共行為封裝到一個可重用模塊,并將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業務無關,卻為業務模塊所共同調用的 邏輯或責任封裝起來,比如日志記錄,便于減少系統的重復代碼,降低模塊間的耦合度,并有利于未來的可操作性和可維護性。
(3). AOP代表的是一個橫向的關 系,將“對象”比作一個空心的圓柱體,其中封裝的是對象的屬性和行為;則面向方面編程的方法,就是將這個圓柱體以切面形式剖開,選擇性的提供業務邏輯。而 剖開的切面,也就是所謂的“方面”了。然后它又以巧奪天功的妙手將這些剖開的切面復原,不留痕跡,但完成了效果。
(4). 實現AOP的技術,主要分為兩大類:一是采用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行為的執行;二是采用靜態織入的方式,引入特定的語法創建“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的代碼。
(5). Spring實現AOP:JDK動態代理和CGLIB代理 JDK動態代理:其代理對象必須是某個接口的實現,它是通過在運行期間創建一個接口的實現類來完成對目標對象的代理;其核心的兩個類是InvocationHandler和Proxy。 CGLIB代理:實現原理類似于JDK動態代理,只是它在運行期間生成的代理對象是針對目標類擴展的子類。CGLIB是高效的代碼生成包,底層是依靠ASM(開源的java字節碼編輯類庫)操作字節碼實現的,性能比JDK強;需要引入包asm.jar和cglib.jar。 使用AspectJ注入式切面和@AspectJ注解驅動的切面實際上底層也是通過動態代理實現的。
(6). AOP使用場景:
Authentication 權限檢查
Caching 緩存
Context passing 內容傳遞
Error handling 錯誤處理
Lazy loading 延遲加載
Debugging 調試
logging, tracing, profiling and monitoring 日志記錄,跟蹤,優化,校準
Performance optimization 性能優化,效率檢查
Persistence 持久化
Resource pooling 資源池
Synchronization 同步
Transactions 事務管理
另外Filter的實現和struts2的攔截器的實現都是AOP思想的體現。
看完上述內容,你們對Spring中IoC和AOP原理和使用場景有進一步的了解嗎?如果還想了解更多相關內容,歡迎關注本站行業資訊頻道,感謝各位的閱讀。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
美股第五次熔斷意味著什么?北京時間3月19日0時56分,標普500指數大跌7%觸發熔斷機制,暫停交易15分鐘。道瓊斯指數也跌破20000點關口,抹去過去三年漲幅。納指則重挫6.30%。美股第五次熔斷意味著:第一,是市場對經濟前景的擔憂加劇。“不確定性”讓市場參與者們不敢在股市駐留,只想在此時遠離市場。第二,是市場對白宮的救市政策仍然不買賬。市場在期待政府方面出臺更加激進的抗...
銀根這個詞估計對于普通人來說,還是比較陌生的,但是在金融界已經是流行多年的專業數語,那銀根是什么意思呢?銀根就是指在目前中國金融市場上資金量的供應。在以前以金銀為錢幣的時候,在市場上交易都是用白銀,所以就流傳下來銀根這個代名詞。銀根又分為:銀根緊俏和銀根松疲兩種。如果在金融市場上資金供不應求的話,通常這種現象就會被稱為銀根緊俏,如果在金融市場上資金供過于求的話,這種現象就會被稱為銀根松疲。那么銀根...
潘婷是一個非常著名的洗發水品牌,創立于1947年,價格親民。一直倡導健康護發,贏得了不少消費者的關注。相信消費者在購買洗發水的時候會愿意相信這個品牌。那么,潘婷洗發水到底有什么效果呢?接下來,邊肖將為大家仔細介紹設計、性能和品牌。潘婷洗發水是如何工作的?潘婷洗發水簡介潘婷洗發水是寶潔公司生產的一種高端洗發水,與海飛絲、飄柔、沙宣等知名品牌齊名。它的特點是修復頭發的能力強,保濕,給頭發最好的護理,使...