Spring框架IOC和AOP的實現原理(概念)

IoC(Inversion of Control) ?

? (1). IoC(Inversion of Control)是指容器控制程序對象之間的關系,而不是傳統實現中,由程序代碼直接操控。控制權由應用代碼中轉到了外部容器,控制權的轉移是所謂反轉。 對于Spring而言,就是由Spring來控制對象的生命周期和對象之間的關系;IoC還有另外一個名字——“依賴注入(Dependency Injection)”。從名字上理解,所謂依賴注入,即組件之間的依賴關系由容器在運行期決定,即由容器動態地將某種依賴關系注入到組件之中。 ?

(2). 在Spring的工作方式中,所有的類都會在spring容器中登記,告訴spring這是個什么東西,你需要什么東西,然后spring會在系統運行到適當的時候,把你要的東西主動給你,同時也把你交給其他需要你的東西。所有的類的創建、銷毀都由 spring來控制,也就是說控制對象生存周期的不再是引用它的對象,而是spring。對于某個具體的對象而言,以前是它控制其他對象,現在是所有對象都被spring控制,所以這叫控制反轉。

(3). 在系統運行中,動態的向某個對象提供它所需要的其他對象。 ?

(4). 依賴注入的思想是通過反射機制實現的,在實例化一個類時,它通過反射調用類中set方法將事先保存在HashMap中的類屬性注入到類中。 總而言之,在傳統的對象創建方式中,通常由調用者來創建被調用者的實例,而在Spring中創建被調用者的工作由Spring來完成,然后注入調用者,即所謂的依賴注入or控制反轉。 注入方式有兩種:依賴注入和設置注入; IoC的優點:降低了組件之間的耦合,降低了業務對象之間替換的復雜性,使之能夠靈活的管理對象。

AOP(Aspect Oriented Programming)

(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思想的體現。?

轉:?https://www.cnblogs.com/cyhzzu/p/6644981.html

轉載于:https://www.cnblogs.com/UncleWang001/p/10642712.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536580.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面向視頻的全新AI架構 —— 阿里云智能視覺技術全解

2019獨角獸企業重金招聘Python工程師標準>>> 我們都知道,AI技術正在以可見的速度被應用于各行各業,然而絕大部分業務場景想應用AI技術,都需要算法工程師根據自身業務的標注數據,來進行單獨訓練,才能打磨出合…

c語言鞏固,鞏固一下C語言中的指針

寫了幾段代碼,再鞏固一下C語言知識。我的記憶方法跟文章中的不一樣。*是取值符號,&取地址符號,()限定子表達式的符號,[]是按索引取數組乘員的符號。優先級方面()>[]>*,&。對于int *(*p(int))[3]; 。我是這么分析的:…

c語言程序設計課程設計學生信息管理系統,C語言程序設計課程設計報告----學生信息管理系統.doc...

河南理工大學計算機學院《C語言程序設計》課程設計報告題目: 學生信息管理系統專業: 計算機科學與技術班級: 計算機XX班學號: 311009033232姓名: *****日期:2012年3月21日1.2意義熟悉C語言程序的編程環境、…

【轉】利用python的KMeans和PCA包實現聚類算法

轉自:https://www.cnblogs.com/yjd_hycf_space/p/7094005.html 題目: 通過給出的駕駛員行為數據(trip.csv),對駕駛員不同時段的駕駛類型進行聚類,聚成普通駕駛類型,激進類型和超冷靜型3類 。 利用Python的s…

c 語言str.size,C/C++ strlen(str)和str.length()和str.size()的區別

strlen(str)和str.length()和str.size()都可以求字符串長度,返回字符串中字符的長度,不包括‘/0’。其中str.length()和str.size()是同義詞,返回同樣的值。strlen(str)是用于求字符數組的長度,其參數是char*。#include #include using namesp…

想跑次高頻策略?快來看看Numpy處理真格量化tick數據的技巧

使用澎博真格量化時,很多用戶希望用numpy處理tick數據,包括tick數據的留存和運算。 這里有一些技巧。 因為tick數據量比較大,為了降低系統的運算負擔,我們不應該在內存里保存大量tick數據。 比如我們只想保存過去10個tick。 可以在…

if語句寫階躍函數C語言,C語言第四章分支語句.ppt

C語言第四章分支語句.ppt例: 輸入三個實數,按從小到大的順序輸出。 main( ) {float a,b,c,t; scanf(“%f,%f,%f ”,&a,&b,&c); if (a>b) { ta; ab; bt; } if (a>c) { ta; ac; ct; } if (b>c) { tb; bc; ct; } printf(“%5.2f,%5.2f…

日本顯示屏巨頭JDI不敵業務壓力,宣布接受中方注資...

本次10億美元的融資金額中,其中7.2億美元據傳來自中國絲綢之路基金。 最初,在液晶領域日本企業一直都占據著主要市場,如夏普、NEC、東芝等。后來隨著韓國三星、LG的強勢進入,日本企業的生存空間開始被搶占,現如今中國…

c語言中 d 1是啥意思,空開D/C是什么意思?終于有人把它說清楚了!

原標題:空開D/C是什么意思?終于有人把它說清楚了!空氣開關是每個人家里必用的東西,但是你到五金店一看,大大小小的開關插座多了去,讓人眼花繚亂。怎么選呢?空開有各種字母型號,這些字…

微信小程序開發 | 官方問答精選

2019獨角獸企業重金招聘Python工程師標準>>> SF問答精選《七》 多組件顯示與隱藏如何實現、function中的...SF問答精選《六》canvas不顯示問題SF問答精選《五》菜單內容左右聯動、生命周期函數SF問答精選《四》eslint 配置使用 co function;apache 反向代…

36歲自學C語言,C語言的數據類型

在C語言中,數據類型可以分為:基本數據類型,構造數據類型,指針類型,空類型四大類。基本數據類型基本數據類型最主要的特點是,其值不可以再分解為其他類型。也就是說,基本數據類型是自我說明。構造…

清北學堂培訓2019.4.4

第一次培訓,心情有點激動(盡管沒了清明節),還見到了各地的dalao們,十分開森 Day 1(李昊dalao) 上午篇 上午呢,主要講了關于高精,快速冪,膜模意義下的運算&…

國二c語言作弊用u盤,計算機等級考試可以插u盤嗎(全國計算機等級考試報名系統官網)...

:不可以 會有嘀嘀嘀的報警聲的:我以前考時不讓帶的,人家讓你不能用優盤的話電腦會控制沒法用的。:首先肯定回你,不可以帶優盤或者其他作弊設備。很多計算機二級考點會把主機箱鎖死,根本插不了優盤。在你進入…

「SCOI2011」棘手的操作

傳送門 Description 有\(N\)個節點,標號從\(1\)到\(N\),這\(N\)個節點一開始相互不連通。第$ i\(個節點的初始權值為\)a_i$ ,接下來有如下一些操作: U x y 加一條邊,連接第 \(x\) 個節點和第\(y\) 個節點。 A1 x v 將…

swft c 語言 數組,如何在swift中實現數組的深拷貝

在Objective-C中如果想將一個數組賦值給另外一個數組,同時想讓兩個數組之間相互獨立(即改變其中的一個數組,不影響另外的一個),有很多的辦法,比如我們可以直接copy,用類方法創建新數組。這樣得到的數組和原來的數組就是兩個完全獨…

tomcat CATALINA_HOME與CATALINA_BASE的區別

區別 https://blog.csdn.net/cfydaniel/article/details/41351927 Tomcat啟動分析(我們為什么要配置CATALINA_HOME環境變量) http://www.cnblogs.com/heshan664754022/archive/2013/03/27/2984357.html轉載于:https://www.cnblogs.com/Andrew520/p/10664921.html

android 廣告欄效果,實現android廣告欄效果

public classBannerLayout extendsRelativeLayout {privateViewPager mViewPager; // 輪播容器// 指示器(圓點)容器privateLinearLayout indicatorContainer;privateDrawable unSelectedDrawable;privateDrawable selectedDrawable;private intWHAT_AUTO_PLAY 1000;private boo…

自我練習

<!doctype html><html><head><meta charset"utf-8"><title>無標題文檔</title><link rel"icon" href"../HTMLWork/day03/psb.ico.ico" type"img/*"></head><body> <a na…

android studio按鈕槽函數,AndroidStudio按鈕Button退出程序

AndroidStudio 3.1.41.創建一個新的項目&#xff0c;項目名稱為Button&#xff0c;界面為activity_button.xml2.打開activity_button.xml3.點擊HelloWorld標簽&#xff0c;按Delete刪除4.左側組件欄選擇Common - Button5.將Button組件拖到界面上&#xff0c;大概中間的位置6.右…

cobbler介紹與部署

cobbler介紹 Cobbler是一個Linux系統安裝的服務&#xff0c;可以通過網絡啟動(PXE)的方式來快速安裝、重裝物理服務器和虛擬機&#xff0c;同時還可以管理DHCP&#xff0c;DNS等。 Cobbler可以使用命令行方式管理&#xff0c;也提供了基于Web的界面管理工具(cobbler-web)&#…