亚洲色图日韩色图欧美-夫妻丰满一区二区三区-熟女五十路开心久久伊人-99精品在免费线偷拍

ioc和aop原理和機(jī)制?

admin 218 0

IOC(控制反轉(zhuǎn))和AOP(面向切面編程)是兩種常見的軟件設(shè)計原理和機(jī)制。

IOC通過將對象的創(chuàng)建和依賴關(guān)系的管理交給容器來實現(xiàn),使得對象之間的耦合度降低,提高了代碼的可維護(hù)性和可測試性。

AOP通過將橫切關(guān)注點(如日志、事務(wù)等)從核心業(yè)務(wù)邏輯中分離出來,通過切面的方式進(jìn)行統(tǒng)一管理,提高了代碼的模塊化和可重用性。

兩者的核心思想都是將關(guān)注點從業(yè)務(wù)邏輯中解耦,提高代碼的可維護(hù)性和可擴(kuò)展性。

ioc和aop原理和機(jī)制?-第1張圖片-贊晨新材料

IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序?qū)ο笾g的關(guān)系,而不是傳統(tǒng)實現(xiàn)中,由程序代碼直接操控??刂茩?quán)由應(yīng)用代碼中轉(zhuǎn)到了外部容器,控制權(quán)的轉(zhuǎn)移是所謂反轉(zhuǎn)。 對于Spring而言,就是由Spring來控制對象的生命周期和對象之間的關(guān)系;IoC還有另外一個名字——“依賴注入(Dependency Injection)”。從名字上理解,所謂依賴注入,即組件之間的依賴關(guān)系由容器在運行期決定,即由容器動態(tài)地將某種依賴關(guān)系注入到組件之中。 (2). 在Spring的工作方式中,所有的類都會在spring容器中登記,告訴spring這是個什么東西,你需要什么東西,然后spring會在系統(tǒng)運行到適當(dāng)?shù)臅r候,把你要的東西主動給你,同時也把你交給其他需要你的東西。所有的類的創(chuàng)建、銷毀都由 spring來控制,也就是說控制對象生存周期的不再是引用它的對象,而是spring。對于某個具體的對象而言,以前是它控制其他對象,現(xiàn)在是所有對象都被spring控制,所以這叫控制反轉(zhuǎn)。(3). 在系統(tǒng)運行中,動態(tài)的向某個對象提供它所需要的其他對象。 (4). 依賴注入的思想是通過反射機(jī)制實現(xiàn)的,在實例化一個類時,它通過反射調(diào)用類中set方法將事先保存在HashMap中的類屬性注入到類中。 總而言之,在傳統(tǒng)的對象創(chuàng)建方式中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例,而在Spring中創(chuàng)建被調(diào)用者的工作由Spring來完成,然后注入調(diào)用者,即所謂的依賴注入or控制反轉(zhuǎn)。 注入方式有兩種:依賴注入和設(shè)置注入; IoC的優(yōu)點:降低了組件之間的耦合,降低了業(yè)務(wù)對象之間替換的復(fù)雜性,使之能夠靈活的管理對象。AOP(Aspect Oriented Programming)(1). AOP面向方面編程基于IoC,是對OOP的有益補(bǔ)充;(2). AOP利用一種稱為“橫切”的技術(shù),剖解開封裝的對象內(nèi)部,并將那些影響了 多個類的公共行為封裝到一個可重用模塊,并將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的 邏輯或責(zé)任封裝起來,比如日志記錄,便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未來的可操作性和可維護(hù)性。(3). AOP代表的是一個橫向的關(guān) 系,將“對象”比作一個空心的圓柱體,其中封裝的是對象的屬性和行為;則面向方面編程的方法,就是將這個圓柱體以切面形式剖開,選擇性的提供業(yè)務(wù)邏輯。而 剖開的切面,也就是所謂的“方面”了。然后它又以巧奪天功的妙手將這些剖開的切面復(fù)原,不留痕跡,但完成了效果。(4). 實現(xiàn)AOP的技術(shù),主要分為兩大類:一是采用動態(tài)代理技術(shù),利用截取消息的方式,對該消息進(jìn)行裝飾,以取代原有對象行為的執(zhí)行;二是采用靜態(tài)織入的方式,引入特定的語法創(chuàng)建“方面”,從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼。(5). Spring實現(xiàn)AOP:JDK動態(tài)代理和CGLIB代理 JDK動態(tài)代理:其代理對象必須是某個接口的實現(xiàn),它是通過在運行期間創(chuàng)建一個接口的實現(xiàn)類來完成對目標(biāo)對象的代理;其核心的兩個類是InvocationHandler和Proxy。 CGLIB代理:實現(xiàn)原理類似于JDK動態(tài)代理,只是它在運行期間生成的代理對象是針對目標(biāo)類擴(kuò)展的子類。CGLIB是高效的代碼生成包,底層是依靠ASM(開源的java字節(jié)碼編輯類庫)操作字節(jié)碼實現(xiàn)的,性能比JDK強(qiáng);需要引入包asm.jar和cglib.jar。 使用AspectJ注入式切面和@AspectJ注解驅(qū)動的切面實際上底層也是通過動態(tài)代理實現(xiàn)的。(6). AOP使用場景: Authentication 權(quán)限檢查 Caching 緩存 Context passing 內(nèi)容傳遞 Error handling 錯誤處理 Lazy loading 延遲加載 Debugging  調(diào)試 logging, tracing, profiling and monitoring 日志記錄,跟蹤,優(yōu)化,校準(zhǔn) Performance optimization 性能優(yōu)化,效率檢查 Persistence  持久化 Resource pooling 資源池 Synchronization 同步 Transactions 事務(wù)管理 另外Filter的實現(xiàn)和struts2的攔截器的實現(xiàn)都是AOP思想的體現(xiàn)。 我們是在使用Spring框架的過程中,其實就是為了使用IOC,依賴注入,和AOP,面向切面編程,這兩個是Spring的靈魂。主要用到的設(shè)計模式有工廠模式和代理模式。IOC就是典型的工廠模式,通過sessionfactory去注入實例。AOP就是典型的代理模式的體現(xiàn)。代理模式是常用的java設(shè)計模式,他的特征是代理類與委托類有同樣的接口,代理類主要負(fù)責(zé)為委托類預(yù)處理消息、過濾消息、把消息轉(zhuǎn)發(fā)給委托類,以及事后處理消息等。代理類與委托類之間通常會存在關(guān)聯(lián)關(guān)系,一個代理類的對象與一個委托類的對象關(guān)聯(lián),代理類的對象本身并不真正實現(xiàn)服務(wù),而是通過調(diào)用委托類的對象的相關(guān)方法,來提供特定的服務(wù)。 spring的IoC容器是spring的核心,spring AOP是spring框架的重要組成部分。在傳統(tǒng)的程序設(shè)計中,當(dāng)調(diào)用者需要被調(diào)用者的協(xié)助時,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例。但在spring里創(chuàng)建被調(diào)用者的工作不再由調(diào)用者來完成,因此控制反轉(zhuǎn)(IoC);創(chuàng)建被調(diào)用者實例的工作通常由spring容器來完成,然后注入調(diào)用者,因此也被稱為依賴注入(DI),依賴注入和控制反轉(zhuǎn)是同一個概念。面向方面編程(AOP)是以另一個角度來考慮程序結(jié)構(gòu),通過分析程序結(jié)構(gòu)的關(guān)注點來完善面向?qū)ο缶幊蹋∣OP)。OOP將應(yīng)用程序分解成各個層次的對象,而AOP將程序分解成多個切面。spring AOP 只實現(xiàn)了方法級別的連接點,在J2EE應(yīng)用中,AOP攔截到方法級別的操作就已經(jīng)足夠。在spring中,未來使IoC方便地使用健壯、靈活的企業(yè)服務(wù),需要利用spring AOP實現(xiàn)為IoC和企業(yè)服務(wù)之間建立聯(lián)系。

IOC:控制反轉(zhuǎn)也叫依賴注入。利用了工廠模式將對象交給容器管理,你只需要在spring配置文件總配置相應(yīng)的bean,以及設(shè)置相關(guān)的屬性,讓spring容器來生成類的實例對象以及管理對象。在spring容器啟動的時候,spring會把你在配置文件中配置的bean都初始化好,然后在你需要調(diào)用的時候,就把它已經(jīng)初始化好的那些bean分配給你需要調(diào)用這些bean的類(假設(shè)這個類名是A),分配的方法就是調(diào)用A的setter方法來注入,而不需要你在A里面new這些bean了。注意:面試的時候,如果有條件,畫圖,這樣更加顯得你懂了.

AOP:面向切面編程。(Aspect-Oriented Programming)AOP可以說是對OOP的補(bǔ)充和完善。OOP引入封裝、繼承和多態(tài)性等概念來建立一種對象層次結(jié)構(gòu),用以模擬公共行為的一個集合。當(dāng)我們需要為分散的對象引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關(guān)系,但并不適合定義從左到右的關(guān)系。例如日志功能。日志代碼往往水平地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關(guān)系。在OOP設(shè)計中,它導(dǎo)致了大量代碼的重復(fù),而不利于各個模塊的重用。將程序中的交叉業(yè)務(wù)邏輯(比如安全,日志,事務(wù)等),封裝成一個切面,然后注入到目標(biāo)對象(具體業(yè)務(wù)邏輯)中去。實現(xiàn)AOP的技術(shù),主要分為兩大類:一是采用動態(tài)代理技術(shù),利用截取消息的方式,對該消息進(jìn)行裝飾,以取代原有對象行為的執(zhí)行;二是采用靜態(tài)織入的方式,引入特定的語法創(chuàng)建“方面”,從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼.簡單點解釋,比方說你想在你的biz層所有類中都加上一個打印‘你好’的功能,這時就可以用aop思想來做.你先寫個類寫個類方法,方法經(jīng)實現(xiàn)打印‘你好’,然后Ioc這個類 ref=“biz.*”讓每個類都注入即可實現(xiàn)。

抱歉,評論功能暫時關(guān)閉!

請先 登錄 再評論,若不是會員請先 注冊!
91人妻人人做人碰人人九色| 91久久精品国产成人| 午夜福利国产精品不卡| 亚洲欧美国产中文色妇| 日韩黄片大全免费在线看| 亚洲国产91精品视频| 久久福利视频这里有精品| 欧美日韩亚洲巨色人妻| 丝袜破了有美女肉体免费观看| 日韩一区二区三区有码| 99久久精品久久免费| 国产伦精品一区二区三区高清版| 日韩美女偷拍视频久久| 日韩免费av一区二区三区| 国产精品久久男人的天堂| 欧美精品久久99九九| 好吊妞视频只有这里有精品| 黄色国产一区二区三区| 亚洲精品日韩欧美精品| 厕所偷拍一区二区三区视频| 国产视频一区二区三区四区| 欧美不雅视频午夜福利| 色综合久久中文综合网| 国产不卡视频一区在线| 国产精品伦一区二区三区四季| 欧美日韩国产欧美日韩| 人妻熟女中文字幕在线| 亚洲天堂精品在线视频| 国产成人午夜福利片片| 中文字幕欧美视频二区| 欧美精品久久99九九| 国产免费一区二区三区不卡| 中文字幕久久精品亚洲乱码| 伊人天堂午夜精品草草网| 国产欧美日韩精品一区二区| 中文字幕亚洲人妻在线视频| 国产精品免费无遮挡不卡视频| 日韩精品中文字幕在线视频| 国产高清三级视频在线观看| 性欧美唯美尤物另类视频 | 国产熟女一区二区精品视频|