您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Spring中的IOC和AOP是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Spring中的IOC和AOP是什么”吧!
我們是在使用Spring框架的過程中,其實(shí)就是為了使用IOC,依賴注入和AOP,面向切面編程,這兩個(gè)是Spring的靈魂。
主要用到的設(shè)計(jì)模式有工廠模式和代理模式
IOC就是典型的工廠模式,通過sessionfactory去注入實(shí)例。
AOP就是典型的代理模式的體現(xiàn)。
代理模式是常用的java設(shè)計(jì)模式,他的特征是代理類與委托類有同樣的接口,代理類主要負(fù)責(zé)為委托類預(yù)處理消息、過濾消息、把消息轉(zhuǎn)發(fā)給委托類,以及事后處理消息等。代理類與委托類之間通常會(huì)存在關(guān)聯(lián)關(guān)系,一個(gè)代理類的對(duì)象與一個(gè)委托類的對(duì)象關(guān)聯(lián),代理類的對(duì)象本身并不真正實(shí)現(xiàn)服務(wù),而是通過調(diào)用委托類的對(duì)象的相關(guān)方法,來提供特定的服務(wù)。
spring的IoC容器是spring的核心,spring AOP是spring框架的重要組成部分。
在傳統(tǒng)的程序設(shè)計(jì)中,當(dāng)調(diào)用者需要被調(diào)用者的協(xié)助時(shí),通常由調(diào)用者來創(chuàng)建被調(diào)用者的實(shí)例。但在spring里創(chuàng)建被調(diào)用者的工作不再由調(diào)用者來完成,因此控制反轉(zhuǎn)(IoC);創(chuàng)建被調(diào)用者實(shí)例的工作通常由spring容器來完成,然后注入調(diào)用者,因此也被稱為依賴注入(DI),依賴注入和控制反轉(zhuǎn)是同一個(gè)概念。
面向方面編程(AOP)是以另一個(gè)角度來考慮程序結(jié)構(gòu),通過分析程序結(jié)構(gòu)的關(guān)注點(diǎn)來完善面向?qū)ο缶幊蹋∣OP)。OOP將應(yīng)用程序分解成各個(gè)層次的對(duì)象,而AOP將程序分解成多個(gè)切面。spring AOP 只實(shí)現(xiàn)了方法級(jí)別的連接點(diǎn),在J2EE應(yīng)用中,AOP攔截到方法級(jí)別的操作就已經(jīng)足夠。在spring中,未來使IoC方便地使用健壯、靈活的企業(yè)服務(wù),需要利用spring AOP實(shí)現(xiàn)為IoC和企業(yè)服務(wù)之間建立聯(lián)系。
IOC:控制反轉(zhuǎn)也叫依賴注入。利用了工廠模式
將對(duì)象交給容器管理,你只需要在spring配置文件總配置相應(yīng)的bean,以及設(shè)置相關(guān)的屬性,讓spring容器來生成類的實(shí)例對(duì)象以及管理對(duì)象。在spring容器啟動(dòng)的時(shí)候,spring會(huì)把你在配置文件中配置的bean都初始化好,然后在你需要調(diào)用的時(shí)候,就把它已經(jīng)初始化好的那些bean分配給你需要調(diào)用這些bean的類(假設(shè)這個(gè)類名是A),分配的方法就是調(diào)用A的setter方法來注入,而不需要你在A里面new這些bean了。
注意:面試的時(shí)候,如果有條件,畫圖,這樣更加顯得你懂了.
AOP:面向切面編程。(Aspect-Oriented Programming)
AOP可以說是對(duì)OOP的補(bǔ)充和完善。OOP引入封裝、繼承和多態(tài)性等概念來建立一種對(duì)象層次結(jié)構(gòu),用以模擬公共行為的一個(gè)集合。當(dāng)我們需要為分散的對(duì)象引入公共行為的時(shí)候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關(guān)系,但并不適合定義從左到右的關(guān)系。例如日志功能。日志代碼往往水平地散布在所有對(duì)象層次中,而與它所散布到的對(duì)象的核心功能毫無關(guān)系。在OOP設(shè)計(jì)中,它導(dǎo)致了大量代碼的重復(fù),而不利于各個(gè)模塊的重用。
將程序中的交叉業(yè)務(wù)邏輯(比如安全,日志,事務(wù)等),封裝成一個(gè)切面,然后注入到目標(biāo)對(duì)象(具體業(yè)務(wù)邏輯)中去。
實(shí)現(xiàn)AOP的技術(shù),主要分為兩大類:一是采用動(dòng)態(tài)代理技術(shù),利用截取消息的方式,對(duì)該消息進(jìn)行裝飾,以取代原有對(duì)象行為的執(zhí)行;二是采用靜態(tài)織入的方式,引入特定的語法創(chuàng)建“方面”,從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼.
簡單點(diǎn)解釋,比方說你想在你的biz層所有類中都加上一個(gè)打印‘你好’的功能,這時(shí)就可以用aop思想來做.你先寫個(gè)類寫個(gè)類方法,方法經(jīng)實(shí)現(xiàn)打印‘你好’,然后Ioc這個(gè)類 ref=“biz.*”讓每個(gè)類都注入即可實(shí)現(xiàn)。
spring 的優(yōu)點(diǎn)?
1.降低了組件之間的耦合性 ,實(shí)現(xiàn)了軟件各層之間的解耦
2.可以使用容易提供的眾多服務(wù),如事務(wù)管理,消息服務(wù)等
3.容器提供單例模式支持
4.容器提供了AOP技術(shù),利用它很容易實(shí)現(xiàn)如權(quán)限攔截,運(yùn)行期監(jiān)控等功能
5.容器提供了眾多的輔助類,能加快應(yīng)用的開發(fā)
6.spring對(duì)于主流的應(yīng)用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring屬于低侵入式設(shè)計(jì),代碼的污染極低
8.獨(dú)立于各種應(yīng)用服務(wù)器
9.spring的DI機(jī)制降低了業(yè)務(wù)對(duì)象替換的復(fù)雜性
10.Spring的高度開放性,并不強(qiáng)制應(yīng)用完全依賴于Spring,開發(fā)者可以自由選擇spring的部分或全部
什么是DI機(jī)制?
依賴注入(Dependecy Injection)和控制反轉(zhuǎn)(Inversion of Control)是同一個(gè)概念,具體的講:當(dāng)某個(gè)角色
需要另外一個(gè)角色協(xié)助的時(shí)候,在傳統(tǒng)的程序設(shè)計(jì)過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實(shí)例。但在spring中
創(chuàng)建被調(diào)用者的工作不再由調(diào)用者來完成,因此稱為控制反轉(zhuǎn)。創(chuàng)建被調(diào)用者的工作由spring來完成,然后注入調(diào)用者
因此也稱為依賴注入。
spring以動(dòng)態(tài)靈活的方式來管理對(duì)象 , 注入的兩種方式,設(shè)置注入和構(gòu)造注入。
設(shè)置注入的優(yōu)點(diǎn):直觀,自然
構(gòu)造注入的優(yōu)點(diǎn):可以在構(gòu)造器中決定依賴關(guān)系的順序。
什么是AOP?
面向切面編程(AOP)完善spring的依賴注入(DI),面向切面編程在spring中主要表現(xiàn)為兩個(gè)方面
1.面向切面編程提供聲明式事務(wù)管理
2.spring支持用戶自定義的切面
面向切面編程(aop)是對(duì)面向?qū)ο缶幊蹋╫op)的補(bǔ)充:
面向?qū)ο缶幊虒⒊绦蚍纸獬筛鱾€(gè)層次的對(duì)象,面向切面編程將程序運(yùn)行過程分解成各個(gè)切面。
AOP從程序運(yùn)行角度考慮程序的結(jié)構(gòu),提取業(yè)務(wù)處理過程的切面,oop是靜態(tài)的抽象,aop是動(dòng)態(tài)的抽象,
是對(duì)應(yīng)用執(zhí)行過程中的步驟進(jìn)行抽象,,從而獲得步驟之間的邏輯劃分。
aop框架具有的兩個(gè)特征:
1.各個(gè)步驟之間的良好隔離性
2.源代碼無關(guān)性
到此,相信大家對(duì)“Spring中的IOC和AOP是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。