<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ? ? ?AOP(Aspect Oriented Programming),是面向切面編程的技術。AOP基于IoC基礎,是對OOP的有益補充。 ? ? ?AOP之所以能得到廣泛認可,主要是因為它將應用系統拆分分了2個部分:核心業務邏輯(Core business concerns)及橫向的通用邏輯,也就是所謂的切面Crosscutting enterprise concerns。例如,所有大中型應用都要涉及到的持久化管理(Persistent)、事務管理(Transaction Management)、權限管理(Privilege Management)、日志管理(Logging)和調試管理(Debugging)等。使用AOP技術,可以讓開發人員只專注核心業務,而通用邏輯則使用AOP技術進行橫向切入,由專人去處理這些通用邏輯,會使得任務簡單明了,提高開發和調試的效率。 ![](https://box.kancloud.cn/2016-02-18_56c53c1223885.jpg) # **基本概念** ? ? ?要想了解AOP,首先得了解幾個重要的基本概念: - 切面(Aspect):一個關注點的模塊化,這個關注點實現可能另外橫切多個對象。比如說事務管理就是J2EE應用中一個很好的橫切關注點例子。切面用Spring的Advisor或攔截器實現。 - 連接點(Joinpoint):程序執行過程中明確的點,如方法的調用或特定的異常被拋出。 - 通知(Advice):在特定的連接點,AOP框架執行的動作。各種類型的通知包括“around”、“before”和“throws”通知。通知類型將在下面討論。許多AOP框架包括Spring都是以攔截器做通知模型,維護一個“圍繞”連接點的攔截器鏈。 - 切入點(Pointcut):指定一個通知將被引發的一系列連接點的集合。AOP框架必須允許開發者指定切入點,例如,使用正則表達式。 - 目標對象(Target Object):包含連接點的對象,也被稱作被通知或被代理對象。 - AOP代理(AOP Proxy):AOP框架創建的對象,包含通知。在Spring中,AOP代理可以是JDK動態代理或CGLIB代理。 - 編織(Weaving):組裝方面來創建一個被通知對象。這可以在編譯時完成(例如使用AspectJ編譯器),也可以在運行時完成。Spring和其他純Java AOP框架一樣,在運行時完成織入。 ![](https://box.kancloud.cn/2016-02-18_56c53c123a81a.jpg) # 各種通知(Advice)類型 ? ? ?為了符合各種流程處理,通知類型提供了5種,可以對目標方法進行全方位處理: - Before advice:在某連接點(JoinPoint)之前執行的通知,但這個通知不能阻止連接點前的執行。 ApplicationContext中在<aop:aspect>里面使用<aop:before>元素進行聲明。 - After advice:當某連接點退出的時候執行的通知(不論是正常返回還是異常退出)。 ApplicationContext中在<aop:aspect>里面使用<aop:after>元素進行聲明。 - After returnadvice:在某連接點正常完成后執行的通知,不包括拋出異常的情況。 ApplicationContext中在<aop:aspect>里面使用<aop:after-returning>元素進行聲明。 - Around advice:包圍一個連接點的通知,類似Web中Servlet規范中的Filter的doFilter方法。可以在方法的調用前后完成自定義的行為,也可以選擇不執行。 ApplicationContext中在<aop:aspect>里面使用<aop:around>元素進行聲明。 - Afterthrowing advice:在方法拋出異常退出時執行的通知。 ApplicationContext中在<aop:aspect>里面使用<aop:after-throwing>元素進行聲明。 ![](https://box.kancloud.cn/2016-02-18_56c53c124c9e2.jpg) ![](https://box.kancloud.cn/2016-02-18_56c53c125b0bc.jpg) (經博友提醒,將上圖改成此圖,是不是比上圖印象更深刻一下,這兩張圖算一幅圖) # AOP 2種代理的區別 ? ? ?AOP支持2種代理,Jdk的動態代理和CGLIB實現機制。二者有什么區別呢: - Jdk基于接口實現:JDK動態代理對實現了接口的類進行代理。 - CGLIB基于繼承:CGLIB代理可以對類代理,主要對指定的類生成一個子類,因為是繼承,所以目標類最好不要使用final聲明。? ? ? ?通常情況下,鼓勵使用jdk代理,因為業務一般都會抽象出一個接口,而且不用引入新的東西。如果是遺留的系統,以前沒有實現接口,那么只能使用CGLIB。 ? ? ?下篇博文,會實踐一下spring aop,敬請期待。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看