AOP (面向切面編程)

主要用於事務控制、權限檢查、日誌…等

分類(按修改的時機):

  • 靜態AOP實現:AOP框架在編譯階段即實現對目標類的修改(增強),生成靜態的AOP代理類(生成*.class文件已經被改掉了,需要使用特定的編輯器)。以AspectJ(需要安裝 java -jar aspectj-1.9.2.jar,並添加環境變量和CLASSPATH(aspectjrt.jar、aspectjtools.jar))爲代表。
  • 動態AOP實現:AOP框架在運行階段動態生成AOP代理(在內存中動態地生成AOP代理類:JDK動態代理、cglib、javassist),以實現對目標對象的增強。以Spring AOP爲代表。

靜態AOP性能更好,動態AOP更方便。

AOP相關概念:

切面(Aspect):業務流程運行的某個特定步驟,也就是應用運行過程的關注點。關注點可能橫切多個對象,所以常常也稱爲橫切關注點。

連接點(Joinpoint):程序執行過程中明確的點,如方法的調用,或者異常的拋出。Spring AOP中,連接點總是方法的調用,

增強處理(Advice):AOP框架在特定的切入點執行的增強動作。處理有“around”、“before”和“after”等類型。

切入點(Pointcut):可以插入增強處理的連接點。簡而言之,當某個連接點滿足指定要求時,該連接點將被添加增強處理,該連接點也就變成了切入點。

引入(Introduction):爲被修改的類添加方法或成員變量。Spring允許引入新的接口到任何被處理的對象。例如,你可以使用一個引入,使任何對象實現IsModified接口,以此來簡化緩存。

目標對象:被AOP框架進行增強處理的對象,也被成爲被增強對象。如果AOP框架是通過運行時代理來實現的,那這個對象殭屍一個被代理的對象。

AOP代理:AOP框架創建的對象,簡單地說,代理就是對目標對象的加強。Spring中的AOP代理可以是JDK的動態代理,也可以是CGLIB代理。前者爲實現接口的目標對象的代理,後者爲不實現接口的目標對象的代理。

織入(Weaving):將增強處理添加到目標對象中、並創建一個被增強的對象(AOP代理)的過程就是織入。織入有兩種實現方式:編譯時增強(例如AspectJ)和運行時增強(例如CGLIB)。Spring和其他船Java AOP框架一樣,在運行時完成織入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章