一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

軟件架構師之AOP

  如果要做為一名合格的軟件架構師,AOP是必須知道的一門技術。那么AOP是什么呢,這就是今天所討論的內容(也是本人最近一陣子的學習總結,希望大家多多指點)。

  AOP,全稱ASPect Oriented Programming,中文名稱叫面向方面編程,也叫面向切面編程

  在實際項目開發過程中,我們往往會注意到有一些模塊/功能,如權限,緩存等,需要存在于軟件的各個業務模塊中,而這些模塊/功能又與業務模塊沒有任何關系,甚至在設計業務模塊時我們完全不用考慮這些模塊/功能的存在,但是在開發過程中才發現這些模塊/功能會給我們帶來無盡的煩惱。因為傳統的OOP方法考慮問題的出發點往往是要解決問題的本身和延伸,所以遇到此類情況時傳統的OOP方法就很難解決。然而對業務模塊和此類模塊稍作分析,我們就會發現,其實它們本質是相同的,只是解決的問題不同,對一個軟件的關注點不同,如下圖所示:  

結合自己的經驗,由圖可知,日志,安全,事務等一類的模塊在一個軟件項目中的位置,AOP要解決的就是此類問題。 AOP的目標便是對這些“橫切關注點”和業務模塊解耦,從而提升軟件的穩定性,擴展性。

  AOP通常包含以下主要概念:

    1. 方面(ASPect):一個關注點的模塊化,這個關注點實現可能另外橫切多個對象。事務管理是J2EE應用中橫切關注點中一個很好的例子。
    2. 連接點(Joinpoint):程序執行過程中明確的點,如方法的調 用或特定的異常被拋出。
    3. 通知(Advice):在特定的連接點AOP框架執行的動作。各種類型的通知包括“around”、“before”和“throws”通知。通知類型將在下面討論。許多AOP框架都是以攔截器做通知模型,維護一個“圍繞”連接點的攔截器鏈。
    4. 切入點(Pointcut):指定一個通知將被引發的一系列連接點 的集合。AOP框架必須允許開發者指定切入點:例如,使用正則表達式。
    5. 引入(Introduction):添加方法或字段到通知化類。
    6. 接口(IsModified),來簡化緩存。
    7. 目標對象(Target object):包含連接點的對象。也被用來 引用通知化或代理化對象。
    8. AOP代理: AOP框架創建的對象,包含通知。
    9. 織入(Weaving):組裝方面創建通知化對象。這可以在編譯時完成(例如使用ASPectJ編譯器),也可以在運行時完成。Spring和其他一些純Java AOP框架, 使用運行時織入。

        AOP通知類型包括:

        1. Around通知: 包圍一個連接點的通知,如方法調用。這是最強大的通知。Aroud通知在方法調用前后完成自定義的行為。它們負責選擇繼續執行連接點或直接返回它們自己的返回值或拋出異常來短路執行。
        2. Before通知: 在一個連接點之前執行的通知,但這個通知 不能阻止流程繼續執行到連接點(除非它拋出一個異常)。
        3. Throws通知: 在方法拋出異常時執行的通知。
        4. After returning通知: 在連接點正常完成后執行的通知, 例如,如果一個方法正常返回,沒有拋出異常。
        5. Around通知是最通用的通知類型。大部分基于攔截器的AOP框架如Nanning和JBoss4只提供 Around通知。

            通常AOP的關注點有以下幾方面:

            1. 權限(Authentication)
            2. 緩存(Cache)
            3. 內容傳遞(Context passing)
            4. 錯誤處理(Error handling)
            5. 懶加載(Lazy loading)
            6. 調試(Debug)
            7. 日志(Log)
            8. 跟蹤,優化,校準(tracing, profiling and monitoring)
            9. 性能優化(Performance optimization)
            10. 持久化(Persistence)
            11. 資源池(Resource pooling)
            12. 同步(Synchronization)
            13. 事務(Transactions)

                了解了AOP的應用場景,下面以權限為例,比較一下傳統方法與AOP方法各自的實現,說明AOP技術的應用

                傳統方法:

                      BusinessA ClassicsPermission() {
              if (tag == "Pass") {
              return new BusinessA();
              }
              throw new Exception("你沒有權限操作BusinessA.");
              }

              it知識庫軟件架構師之AOP,轉載需保留來源!

              鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

              主站蜘蛛池模板: 亚洲天堂久久精品成人 | 午夜伦伦 | 亚洲视频国产视频 | 91福利视频网站 | 91精品国产高清久久久久久91 | 天天综合网在线 | 精品中文字幕乱码一区二区 | 亚洲人成一区二区三区 | 久久影视网 | 亚洲六月丁香六月婷婷蜜芽 | 天堂一区二区三区精品 | 91精品国产麻豆91久久久久久 | 老司机日日摸夜夜摸精品影院 | 精品国产自在现线久久 | 中文字幕91在线 | 91色在线 | 99国产精品国产精品 | 久久久久久久影院 | 中文字幕久久久久久精 | 欧美午夜性视频 | 2020国产成人久久精品 | 亚洲福利视频一区 | 最新国产精品亚洲 | 免费大片黄在线观看yw | 91久久综合精品国产丝袜长腿 | 日本韩国三级在线 | 亚洲视色 | 成人黄色免费网址 | 婷婷丁香激情五月 | 日韩经典欧美一区二区三区 | 久久国产乱子伦免费精品 | 一级做受毛片免费大片 | 精品国产一区二区二三区在线观看 | 亚洲激情在线 | 99精品国产第一福利网站 | 色综合五月婷婷 | 69国产成人综合久久精 | www成人国产在线观看网站 | 久久久噜噜噜久久久午夜 | 亚洲伦理一区二区 | 久草国产精品 |