<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
    主站蜘蛛池模板: 永久在线观看免费视频 | 4338×亚洲全国最大色成网站| 亚洲爆乳精品无码一区二区三区| 亚洲欧美中文日韩视频| 91精品免费不卡在线观看| 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲国产精品一区二区久| 日本人成在线视频免费播放| 亚洲国产日韩在线视频| 中文字幕日本人妻久久久免费| 亚洲人成人无码网www电影首页| 国产综合免费精品久久久| 亚洲女同成av人片在线观看| 久久99久久成人免费播放| 国产亚洲情侣一区二区无| 国产99久久久国产精免费| 亚洲色婷婷六月亚洲婷婷6月| 你懂的在线免费观看| 亚洲国产精品lv| 国产91色综合久久免费分享| 亚洲综合色区中文字幕| 男女交性永久免费视频播放| 无码色偷偷亚洲国内自拍| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 国产免费人成在线视频| 免费精品国自产拍在线播放| 国产午夜亚洲精品午夜鲁丝片| 久久久久久AV无码免费网站| 亚洲videos| 亚洲av无码成人精品区| 人妻免费一区二区三区最新| 久久精品国产亚洲77777| 成人免费无遮挡无码黄漫视频| 水蜜桃视频在线观看免费| 亚洲国产第一站精品蜜芽| 无限动漫网在线观看免费| 污污视频免费观看网站| 久久亚洲精品无码aⅴ大香| 日韩免费电影在线观看| 男女一边摸一边做爽的免费视频| 亚洲精品福利在线观看|