少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          AOP有三種植入切面的方法:其一是編譯期織入,這要求使用特殊的Java編譯器,AspectJ是其中的代表者;其二是類裝載期織入,而這要求使用特殊的類裝載器,AspectJ和AspectWerkz是其中的代表者;其三為動態(tài)代理織入,在運(yùn)行期為目標(biāo)類添加增強(qiáng)生成子類的方式,Spring AOP采用動態(tài)代理織入切面。

          Spring AOP使用了兩種代理機(jī)制,一種是基于JDK的動態(tài)代理,另一種是基于CGLib的動態(tài)代理,之所以需要兩種代理機(jī)制,很大程度上是因?yàn)镴DK本身只提供基于接口的代理,不支持類的代理。

          Spring的三種注入方式:
          接口注入(不推薦)
          getter,setter方式注入(比較常用)
          構(gòu)造器注入(死的應(yīng)用)

          什么是AOP?
          面向切面編程(AOP)完善spring的依賴注入(DI),面向切面編程在spring中主要表現(xiàn)為兩個(gè)方面
          1.面向切面編程提供聲明式事務(wù)管理
          2.spring支持用戶自定義的切面

          面向切面編程(aop)是對面向?qū)ο缶幊蹋╫op)的補(bǔ)充,
          面向?qū)ο缶幊虒⒊绦蚍纸獬筛鱾€(gè)層次的對象,面向切面編程將程序運(yùn)行過程分解成各個(gè)切面。
          AOP從程序運(yùn)行角度考慮程序的結(jié)構(gòu),提取業(yè)務(wù)處理過程的切面,oop是靜態(tài)的抽象,aop是動態(tài)的抽象,
          是對應(yīng)用執(zhí)行過程中的步驟進(jìn)行抽象,,從而獲得步驟之間的邏輯劃分。

          aop框架具有的兩個(gè)特征:
          1.各個(gè)步驟之間的良好隔離性
          2.源代碼無關(guān)性

          什么是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以動態(tài)靈活的方式來管理對象 , 注入的兩種方式,設(shè)置注入和構(gòu)造注入。
          設(shè)置注入的優(yōu)點(diǎn):直觀,自然
          構(gòu)造注入的優(yōu)點(diǎn):可以在構(gòu)造器中決定依賴關(guā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對于主流的應(yīng)用框架提供了集成支持,如hibernate,JPA,Struts等
          7.spring屬于低侵入式設(shè)計(jì),代碼的污染極低
          8.獨(dú)立于各種應(yīng)用服務(wù)器
          9.spring的DI機(jī)制降低了業(yè)務(wù)對象替換的復(fù)雜性
          10.Spring的高度開放性,并不強(qiáng)制應(yīng)用完全依賴于Spring,開發(fā)者可以自由選擇spring的部分或全部


          一、spring工作原理:

          1.spring mvc請所有的請求都提交給DispatcherServlet,它會委托應(yīng)用系統(tǒng)的其他模塊負(fù)責(zé)負(fù)責(zé)對請求進(jìn)行真正的處理工作。
          2.DispatcherServlet查詢一個(gè)或多個(gè)HandlerMapping,找到處理請求的Controller.
          3.DispatcherServlet請請求提交到目標(biāo)Controller
          4.Controller進(jìn)行業(yè)務(wù)邏輯處理后,會返回一個(gè)ModelAndView
          5.Dispathcher查詢一個(gè)或多個(gè)ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
          6.視圖對象負(fù)責(zé)渲染返回給客戶端。


          描述一下Spring中實(shí)現(xiàn)DI(Dependency Injection)的幾種方式

          方式一:接口注入,在實(shí)際中得到了普遍應(yīng)用,即使在IOC的概念尚未確立時(shí),這樣的方法也已經(jīng)頻繁出現(xiàn)在我們的代碼中。
          方式二:Type2 IoC: Setter injection對象創(chuàng)建之后,將被依賴對象通過set方法設(shè)置進(jìn)去
          方式三:Type3 IoC: Constructor injection對象創(chuàng)建時(shí),被依賴對象以構(gòu)造方法參數(shù)的方式注入

           簡單描述下IOC(inversion of control)的理解
          一個(gè)類需要用到某個(gè)接口的方法,我們需要將類A和接口B的實(shí)現(xiàn)關(guān)聯(lián)起來,最簡單的方法是類A中創(chuàng)建一個(gè)對于接口B的實(shí)現(xiàn)C的實(shí)例,但這種方法顯然兩者的依賴(Dependency)太大了。而IoC的方法是只在類A中定義好用于關(guān)聯(lián)接口B的實(shí)現(xiàn)的方法,將類A,接口B和接口B的實(shí)現(xiàn)C放入IoC的 容器(Container)中,通過一定的配置由容器(Container)來實(shí)現(xiàn)類A與接口B的實(shí)現(xiàn)C的關(guān)聯(lián)。

          spring提供的事務(wù)管理可以分為兩類:編程式的和聲明式的。編程式的,比較靈活,但是代碼量大,存在重復(fù)的代碼比較多;聲明式的比編程式的更靈活。
          編程式主要使用transactionTemplate。省略了部分的提交,回滾,一系列的事務(wù)對象定義,需注入事務(wù)管理對象.
          void add()
          {
          transactionTemplate.execute( new TransactionCallback(){
          pulic Object doInTransaction(TransactionStatus ts)
          { //do sth}
          }
          }
          聲明式:
          使用TransactionProxyFactoryBean:

          PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly
          圍繞Poxy的動態(tài)代理 能夠自動的提交和回滾事務(wù)
          org.springframework.transaction.interceptor.TransactionProxyFactoryBean
          PROPAGATION_REQUIRED–支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就新建一個(gè)事務(wù)。這是最常見的選擇。
          PROPAGATION_SUPPORTS–支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方式執(zhí)行。
          PROPAGATION_MANDATORY–支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就拋出異常。
          PROPAGATION_REQUIRES_NEW–新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起。
          PROPAGATION_NOT_SUPPORTED–以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。
          PROPAGATION_NEVER–以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。
          PROPAGATION_NESTED–如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒有事務(wù),則進(jìn)行與PROPAGATION_REQUIRED類似的操作。

          spring中的核心類有那些,各有什么作用?
          BeanFactory:產(chǎn)生一個(gè)新的實(shí)例,可以實(shí)現(xiàn)單例模式
          BeanWrapper:提供統(tǒng)一的get及set方法
          ApplicationContext:提供框架的實(shí)現(xiàn),包括BeanFactory的所有功能
          spring的ioc及di代表什么意思?
          控制權(quán)由代碼轉(zhuǎn)向容器,通過容器動態(tài)將某些對象加入。
          如何在spring中實(shí)現(xiàn)國際化?
          在applicationContext.xml加載一個(gè)bean
          message.properties是一個(gè)鍵名加鍵值的文件,

















































           

          posted on 2013-05-29 14:37 abin 閱讀(641) 評論(0)  編輯  收藏 所屬分類: spring
          主站蜘蛛池模板: 宝山区| 岳阳市| 托克逊县| 武城县| 镶黄旗| 临汾市| 阿拉善左旗| 元谋县| 新邵县| 庆安县| 锡林浩特市| 荣成市| 阿拉善盟| 堆龙德庆县| 华蓥市| 方正县| 横山县| 平潭县| 泸定县| 本溪市| 湘乡市| 大名县| 长宁区| 利津县| 青神县| 湄潭县| 剑河县| 中卫市| 和顺县| 克什克腾旗| 闽侯县| 宁安市| 霸州市| 洛扎县| 雅江县| 曲阜市| 乐清市| 孟连| 淮阳县| 曲周县| 家居|