<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

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

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

    Spring AOP使用了兩種代理機(jī)制,一種是基于JDK的動(dòng)態(tài)代理,另一種是基于CGLib的動(dòng)態(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是動(dòng)態(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以動(dòng)態(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的動(dòng)態(tài)代理 能夠自動(dòng)的提交和回滾事務(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)向容器,通過容器動(dòng)態(tài)將某些對象加入。
    如何在spring中實(shí)現(xiàn)國際化?
    在applicationContext.xml加載一個(gè)bean
    message.properties是一個(gè)鍵名加鍵值的文件,

















































     

    posted on 2013-05-29 14:37 abin 閱讀(638) 評論(0)  編輯  收藏 所屬分類: spring
    主站蜘蛛池模板: 免费国产综合视频在线看| 亚洲AV无码一区二区三区电影 | 亚洲区小说区图片区QVOD| 亚洲日本VA中文字幕久久道具| 免费在线观看h片| 日韩精品无码一区二区三区免费| 无码人妻精品中文字幕免费| 亚洲人精品午夜射精日韩| www一区二区www免费| 四虎永久免费观看| 国产av无码专区亚洲av毛片搜 | 在线亚洲v日韩v| 精品无码国产污污污免费| 亚洲午夜精品一区二区麻豆| 成年女人18级毛片毛片免费观看| 亚洲AV综合色区无码二区爱AV| 免费观看黄色的网站| 亚洲伊人久久大香线蕉结合| 美女羞羞视频免费网站| 国产一级做a爱免费视频| 深夜特黄a级毛片免费播放| 久久精品免费观看| 亚洲自偷自拍另类12p| 无码乱肉视频免费大全合集| 亚洲综合成人婷婷五月网址| 国产片免费在线观看| a级毛片免费观看网站| 亚洲AV无码久久精品蜜桃| 永久在线观看www免费视频| 亚洲综合成人婷婷五月网址| 亚洲欧洲精品成人久久曰影片 | 国产精品亚洲精品| 国产精品黄页在线播放免费| 一级特黄a免费大片| 免费电影在线观看网站| 午夜男人一级毛片免费 | 亚洲人成在线精品| 国产成人精品免费直播 | 亚洲AV无码一区二区三区网址| 色久悠悠婷婷综合在线亚洲| 99爱在线精品视频免费观看9|