<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

    面向切面編程(AOP)通過提供另外一種思考程序結構的途經(jīng)來彌補面向對象編程(OOP)的不足。在OOP中模塊化的關鍵單元是類(classes),而在AOP中模塊化的單元則是切面。切面能對關注點進行模塊化,例如橫切多個類型和對象的事務管理。(在AOP術語中通常稱作橫切(crosscutting)關注點。)

    AOP框架是Spring的一個重要組成部分。但是Spring IoC容器并不依賴于AOP,這意味著你有權利選擇是否使用AOP,AOP做為Spring IoC容器的一個補充,使它成為一個強大的中間件解決方案。

    AOP即Aspect-Oriented Programming的縮寫,中文意思是面向切面(或方面)編程。AOP實際上是一種編程思想,可以通過預編譯方式和運行期動態(tài)代理實現(xiàn)在不修改源代碼的情況下給程序動態(tài)統(tǒng)一添加功能的一種思想。

    AOP在Spring Framework中的作用

    • 提供聲明式企業(yè)服務,特別是為了替代EJB聲明式服務。最重要的服務是聲明性事務管理

    • 允許用戶實現(xiàn)自定義切面,用AOP來完善OOP的使用。

    目前AOP主要有:Spring AOP ,JBOSS AOP ,AspectJ AOP

    AOP與OOP:可以理解為OOP是縱向的采用繼承樹形式的。而AOP是橫向的

    Spring AOP:

    由于Spring AOP是容易實現(xiàn)的,如果你計劃在Spring Beans之上將橫切關注點模塊化,Spring的這一目標將是要點之一。但同樣的目標也可能成為一個限制,如果你用的是普通的Java對象而不是Spring beans,并基于此將橫切關注點模塊化的話。另一方面,AspectJ可用于基于普通Java對象的模塊化,但在實施之前需要良好的關于這個主題的知識。
     
    Spring AOP致力于提供一種能夠與Spring IoC緊密集成的面向方面框架的實現(xiàn),以便于解決在開發(fā)企業(yè)級項目時面臨的常見問題。明確你在應用橫切關注點(cross-cutting concern)時(例如事物管理、日志或性能評估),需要處理的是Spring beans還是POJO。如果正在開發(fā)新的應用,則選擇Spring AOP就沒有什么阻力。但是如果你正在維護一個現(xiàn)有的應用(該應用并沒有使用Spring框架),AspectJ就將是一個自然的選擇了。為了詳細說明這一點,假如你正在使用Spring AOP,當你想將日志功能作為一個通知(advice)加入到你的應用中,用于追蹤程序流程,那么該通知(Advice)就只能應用在Spring beans的連接點(Joinpoint)之上。
     

    AspectJ AOP:

    使用“AspectJ”你可以在任何Java對象上應用通知,而不需要在任何文件中創(chuàng)建或配置任何bean。
     

    另一個需要考慮的因素是,你是希望在編譯期間進行織入(weaving),還是編譯后(post-compile)或是運行時(run-time)。Spring只支持運行時織入。如果你有多個團隊分別開發(fā)多個使用Spring編寫的模塊(導致生成多個jar文件,例如每個模塊一個jar文件),并且其中一個團隊想要在整個項目中的所有Spring bean(例如,包括已經(jīng)被其他團隊打包了的jar文件)上應用日志通知(在這里日志只是用于加入橫切關注點的舉例),那么通過配置該團隊自己的Spring配置文件就可以輕松做到這一點。之所以可以這樣做,就是因為Spring使用的是運行時織入。

     因為Spring基于代理模式(使用CGLIB),它有一個使用限制,即無法在使用final修飾的bean上應用橫切關注點。因為代理需要對Java類進行繼承,一旦使用了關鍵字final,這將是無法做到的。

    在這種情況下,你也許會考慮使用AspectJ,其支持編譯期織入且不需要生成代理。


    于此相似,在static和final方法上應用橫切關注點也是無法做到的。因為Spring基于代理模式。如果你在這些方法上配置通知,將導致運行時異常,因為static和final方法是不能被覆蓋的。在這種情況下,你也會考慮使用AspectJ,因為其支持編譯期織入且不需要生成代理。
     
    缺點:
    使用AspectJ的一個間接局限是,因為AspectJ通知可以應用于POJO之上,它有可能將通知應用于一個已配置的通知之上。對于一個你沒有注意到這方面問題的大范圍應用的通知,這有可能導致一個無限循環(huán)。
     

    面向切面編程,把散落在程序中的公共部分提取出來,做成切面類,這樣的好處在于,代碼的可重用,一旦涉及到該功能的需求發(fā)生變化,只要修改該代碼就行,否則,你要到處修改,如果只要修改1、2處那還可以接受,萬一有1000處呢。 
    AOP底層的東西就是JDK動態(tài)代理和CGLIB代理,說白了就是增強類的功能。 
    最常用的AOP應用在數(shù)據(jù)庫連接以及事務處理上。

    AOP:面向切面編程。(Aspect-Oriented Programming)
    AOP可以說是對OOP的補充和完善。OOP引入封裝、繼承和多態(tài)性等概念來建立一種對象層次結構,用以模擬公共行為的一個集合。當我們需要為分散的對象引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關系,但并不適合定義從左到右的關系。例如日志功能。日志代碼往往水平地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關系。在OOP設計中,它導致了大量代碼的重復,而不利于各個模塊的重用。
    將程序中的交叉業(yè)務邏輯(比如安全,日志,事務等),封裝成一個切面,然后注入到目標對象(具體業(yè)務邏輯)中去。

    實現(xiàn)AOP的技術,主要分為兩大類:一是采用動態(tài)代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行為的執(zhí)行;二是采用靜態(tài)織入的方式,引入特定的語法創(chuàng)建“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的代碼.

     AOP(Aspect Orient Programming),作為面向對象編程的一種補充,廣泛應用于處理一些具有橫切性質(zhì)的系統(tǒng)級服務,如事務管理、安全檢查、緩存、對象池管理等。 AOP 實現(xiàn)的關鍵就在于 AOP 框架自動創(chuàng)建的 AOP 代理,AOP 代理則可分為靜態(tài)代理和動態(tài)代理兩大類,其中靜態(tài)代理是指使用 AOP 框架提供的命令進行編譯,從而在編譯階段就可生成 AOP 代理類,因此也稱為編譯時增強;而動態(tài)代理則在運行時借助于 JDK 動態(tài)代理、CGLIB 等在內(nèi)存中"臨時"生成 AOP 動態(tài)代理類,因此也被稱為運行時增強。









    posted on 2015-04-20 02:07 abin 閱讀(437) 評論(0)  編輯  收藏 所屬分類: spring
    主站蜘蛛池模板: 国产片免费在线观看| 久久精品国产亚洲av水果派| 久久九九久精品国产免费直播| 亚洲AV无码一区二区二三区入口 | 免费又黄又爽又猛的毛片| 91视频免费网站| 国产精品亚洲自在线播放页码| 免费不卡中文字幕在线| 午夜老司机永久免费看片| 亚洲欧美成aⅴ人在线观看| 国产亚洲精品精品国产亚洲综合| 精品成在人线AV无码免费看 | 中文字幕亚洲综合精品一区| 免费看一级做a爰片久久| 84pao强力永久免费高清| 曰批免费视频播放免费| 亚洲人和日本人jizz| 国产精品亚洲mnbav网站| 毛片免费观看视频| 午夜免费福利片观看| 日韩在线观看免费| 亚洲一卡2卡3卡4卡国产网站| AV在线播放日韩亚洲欧| 在线观看无码AV网站永久免费| 两个人看的www免费视频| 亚洲爆乳无码专区www| 亚洲第一网站免费视频| 亚洲中文久久精品无码| 日韩视频免费一区二区三区| 免费无码一区二区三区| 中文字幕免费播放| 免费看黄福利app导航看一下黄色录像| 精品亚洲成a人片在线观看少妇 | 国产精品亚洲一区二区麻豆| 亚洲va在线va天堂va四虎| 亚洲女人被黑人巨大进入| 狠狠久久永久免费观看| 波多野结衣在线免费观看| 永久免费av无码入口国语片| 一级做性色a爰片久久毛片免费| 亚洲色大成网站WWW国产|