一、spring 的優(yōu)點?1.降低了組件之間的耦合性 ,實現(xiàn)了軟件各層之間的解耦 2.可以使用容易提供的眾多服務(wù),如事務(wù)管理,消息服務(wù)等 3.容器提供單例模式支持 4.容器提供了AOP技術(shù),利用它很容易實現(xiàn)如權(quán)限攔截,運行期監(jiān)控等功能 5.容器提供了眾多的輔助類,能加快應(yīng)用的開發(fā) 6.spring對于主流的應(yīng)用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring屬于低侵入式設(shè)計,代碼的污染極低 8.獨立于各種應(yīng)用服務(wù)器 9.spring的DI機制降低了業(yè)務(wù)對象替換的復雜性 10.Spring的高度開放性,并不強制應(yīng)用完全依賴于Spring,開發(fā)者可以自由選擇spring的部分或全部 二、什么是IOC(DI)?IOC,即控制反轉(zhuǎn)(Inversion of Control),他與依賴注入(Dependecy Injection)是同一個概念。具體的講:當某個角色需要另外一個角色協(xié)助的時候,在傳統(tǒng)的程序設(shè)計過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例。但在spring中 創(chuàng)建被調(diào)用者的工作不再由調(diào)用者來完成,因此稱為控制反轉(zhuǎn)。創(chuàng)建被調(diào)用者的工作由spring來完成,然后注入調(diào)用者因此也稱為依賴注入。 它并不是一種技術(shù)實現(xiàn),而是一種設(shè)計思想。在任何一個有實際開發(fā)意義的程序項目中,我們會使用很多類來描述它們特有的功能,并且通過類與類之間的相互協(xié)作來完成特定的業(yè)務(wù)邏輯。這個時候,每個類都需要負責管理與自己有交互的類的引用和依賴,代碼將會變的異常難以維護和極度的高耦合。而IOC的出現(xiàn)正是用來解決這個問題,我們通過IOC將這些相互依賴對象的創(chuàng)建、協(xié)調(diào)工作交給Spring容器去處理,每個對象只需要關(guān)注其自身的業(yè)務(wù)邏輯關(guān)系就可以了。在這樣的角度上來看,獲得依賴的對象的方式,進行了反轉(zhuǎn),變成了由spring容器控制對象如何獲取外部資源(包括其他對象和文件資料等等)。
在上面這個例子中,IOC起到的就是醫(yī)生的作用,它收集你的需求要求,并且對癥下藥,直接把藥開給你。你就是對象,藥品就是你所需要的外部資源。通過醫(yī)生,你不用再去找藥品,而是通過醫(yī)生把藥品開給你。這就是整個IOC的精髓所在。 Spring以動態(tài)靈活的方式來管理對象 , 注入的兩種方式,設(shè)置注入和構(gòu)造注入。 設(shè)置注入的優(yōu)點:直觀,自然 構(gòu)造注入的優(yōu)點:可以在構(gòu)造器中決定依賴關(guān)系的順序。 三、什么是AOP?AOP:面向切面編程,往往被定義為促使軟件系統(tǒng)實現(xiàn)關(guān)注點的分離的技術(shù)。系統(tǒng)是由許多不同的組件所組成的,每一個組件各負責一塊特定功能。除了實現(xiàn)自身核心功能之外,這些組件還經(jīng)常承擔著額外的職責。例如日志、事務(wù)管理和安全這樣的核心服務(wù)經(jīng)常融入到自身具有核心業(yè)務(wù)邏輯的組件中去。這些系統(tǒng)服務(wù)經(jīng)常被稱為橫切關(guān)注點,因為它們會跨越系統(tǒng)的多個組件。 AOP的概念不像IOC一樣實例化舉例,現(xiàn)在我們以一個系統(tǒng)中的具體實現(xiàn)來講講AOP具體是個什么技術(shù)。
下面介紹一下AOP相關(guān)的術(shù)語: 1、通知: 通知定義了切面是什么以及何時使用的概念。Spring 切面可以應(yīng)用5種類型的通知:
2、連接點:是在應(yīng)用執(zhí)行過程中能夠插入切面的一個點。 3、切點: 切點定義了切面在何處要織入的一個或者多個連接點。 4、切面:是通知和切點的結(jié)合。通知和切點共同定義了切面的全部內(nèi)容。 5、引入:引入允許我們向現(xiàn)有類添加新方法或?qū)傩浴?/p> 6、織入:是把切面應(yīng)用到目標對象,并創(chuàng)建新的代理對象的過程。切面在指定的連接點被織入到目標對象中。在目標對象的生命周期中有多個點可以進行織入:
面向切面編程(AOP)完善spring的依賴注入(DI),面向切面編程在spring中主要表現(xiàn)為兩個方面:
面向切面編程(aop)是對面向?qū)ο缶幊蹋╫op)的補充, 面向?qū)ο缶幊虒⒊绦蚍纸獬筛鱾€層次的對象,面向切面編程將程序運行過程分解成各個切面。 AOP從程序運行角度考慮程序的結(jié)構(gòu),提取業(yè)務(wù)處理過程的切面,oop是靜態(tài)的抽象,aop是動態(tài)的抽象, 是對應(yīng)用執(zhí)行過程中的步驟進行抽象,,從而獲得步驟之間的邏輯劃分。 AOP框架具有的兩個特征:
四、總結(jié):IOC:控制反轉(zhuǎn)也叫依賴注入,IOC利用java反射機制,AOP利用代理模式。所謂控制反轉(zhuǎn)是指,本來被調(diào)用者的實例是有調(diào)用者來創(chuàng)建的,這樣的缺點是耦合性太強,IOC則是統(tǒng)一交給spring來管理創(chuàng)建,將對象交給容器管理,你只需要在spring配置文件總配置相應(yīng)的bean,以及設(shè)置相關(guān)的屬性,讓spring容器來生成類的實例對象以及管理對象。在spring容器啟動的時候,spring會把你在配置文件中配置的bean都初始化好,然后在你需要調(diào)用的時候,就把它已經(jīng)初始化好的那些bean分配給你需要調(diào)用這些bean的類。 AOP:面向切面編程。(Aspect-Oriented Programming) AOP可以說是對OOP的補充和完善。OOP引入封裝、繼承和多態(tài)性等概念來建立一種對象層次結(jié)構(gòu),用以模擬公共行為的一個集合。實現(xiàn)AOP的技術(shù),主要分為兩大類:一是采用動態(tài)代理技術(shù),利用截取消息的方式,對該消息進行裝飾,以取代原有對象行為的執(zhí)行;二是采用靜態(tài)織入的方式,引入特定的語法創(chuàng)建“方面”,從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼,屬于靜態(tài)代理。 如果還不明白,放棄java吧! |
|
來自: hlhq1 > 《Interview》