日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring AoP学习 -----AoP的基本概念

發布時間:2024/1/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring AoP学习 -----AoP的基本概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

    Aop的發展經理過兩個階段,第一個是靜態Aop階段,第二個是動態Aop階段。

    靜態Aop階段:作為第一代的Aop,以最初的AspectJ為代表,特點是以相應的橫切關注點以Aspect形式實現之后,會通過特定的編譯器,將實現后的Aspect編譯并織入到系統的靜態類中,優點是Aspect直接以java字節碼的形式編譯到java類中,java虛擬機可以像通常一樣加載java類運行,不會給系統運行造成任何性能損失。

    動態Aop階段:作為第二代的Aop,大都通過java語言提供的各種動態特性來實現第一代Aop織入到當前系統的過程,這類產品有:JBoss ?AOP,Spring AOP,Naning AOP ,還有就是第一代的AOP產品AspectJ在融合了Aspect Werkz框架之后,成為唯一支持靜動態的AOP產品。 優點:靈活易用,和靜態Aop最大的不同就是,Aop的注入過程在系統運行開始之后運行,而不是預編譯到系統中,而且織入信息大部分采用外部xml,可以動態更改織入邏輯。缺點:帶來性能問題,因為大多數Aop的實現都是在類加載或者系統運行期間,采用對系統字節碼進行炒作方式來完成Aspect到系統的織入。

    Aop實現機制: ?

  • 動態代理:說有需要織入橫切關注點邏輯的模塊類都得實現相應的接口,因為動態代理機制只對接口有效,動態代理在運行期間使用反射,相對于編譯后的靜態類來說,性能稍遜一些
  • 動態字節碼增強:使用asm或者clib等java工具類在程序運行期間,動態構建字節碼的class文件,通過動態字節碼增強技術,為這些系統模塊類生成相應的子類,而將橫切邏輯加到這些子類中,讓應用程序在執行期間使用的是這些動態生成的子類,從而達到將橫切邏輯織入系統的目的。不足:?若類或者方法聲明為final的話,則無法對其進行子類化擴展。
  • java代碼生成:早期EJB用得比較多,現在已經基本上不用了。
  • 自定義類加載器:通過讀取外部文件規定的織入規則和必要的信息,在加載class文件期間就可以講橫切邏輯添加到系統模塊類的現有邏輯中, 然后將改動后的class交給虛擬機運行。
  • AOL拓展
  •   Aop中的術語:

      Joinpoint:在執行Aop功能模塊織入到oop的功能模塊中時那個執行點稱之為JoinPoint。

      較為常見的織入點:

  • Method Call:當方法調用的時候所處的程序執行點。
  • Method Call execution :代表的是某個方法內部執行開始時點
  • Construction Call(構造方法調用):程序執行過程中對某個對象調用其構造方法進行初始化的時點
  • Constructor Call Execution(構造方法執行):指的是某個對象構造方法內部執行的開始時點。
  • Field Set (字段設置) 對象的某個屬性通過setter哈哈被設置或者直接被設置的時點
  • 字段獲取:對應的是某個對象相應屬性被訪問的時點
  • Class?initialize(類初始化):指的是類中某些靜態類型后再靜態塊的初始化時點
  •       這些都是比較常見的joinpoint,其實每一個認為必要的執行時都可以作文joinpoint,但某些位置Aop產品比較難以捕捉。

      Pointcut:是Joinpoint的表述方式。將橫切邏輯織入當前系統的過程中,需要產后照pointcut規定的JoinPoint信息。

        pointcut的表述方式:

          1.直接指定joinpoint所在方法名稱。

          2.正則表達式

          3.使用指定的pointcut表述語言

      Advice:是單一橫切關注點邏輯的載體,他代表將會織入到joinpoint的橫切邏輯

          Advice組成的具體形式:

  • Before Advice :在Joinpoint指定位置之前執行的Advice類型,通常不會中斷程序執行流程,但是也可以通過跑出一場的方式來中斷流程。
  • After Advice:在方法回信完成之后調用的advice,又可以細分為三種:after return Advice :當JoinPoint執行流程正常完成后執行;after throwing advice :又稱為throw advice,只有在錢JoinPoint執行過程中拋出異常的情況下執行;after finally advice :不管joinpoint處執行流程是正常終止了海仕拋出異常都會執行。
  • Around Advice對附加其上的Joinpoint進行“包裹”,可以再JoinPoint之前和之后都指定相應的邏輯,甚至于joinpoint中斷或者忽略joinpoint處yuanchengxu流程的執行
  •   Introduction:可以為原有的對象添加新的特征或者行為,Introduction類型的Advice因實現技術的不同,在具體軟件環境中可以存在性能差異。

      Aspect:是對系統中的橫切關注點邏輯進行模塊化封裝的Aop概念實體。

      織入和織入器:完成橫切關注點邏輯到 系統的最終織入。

              AspectJ有專門的編譯器完成織入操作,即ajc,JBoss AOP采用自定義的類加載器來完成最終織入,spring AOP使用一組類來完成最終的織入操作。Proxy Factory類是Spring AOP中最通用的織入器。

      目標對象:符合pointcut所指定的條件,將在織入過程中被織入橫切邏輯的對象,稱為目標對象(Target Object)

    轉載于:https://www.cnblogs.com/Qbright/archive/2012/07/23/2599242.html

    總結

    以上是生活随笔為你收集整理的spring AoP学习 -----AoP的基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。