AOP概念和7個專業術語


我眼中的AOP

  初看aop,上來就是一大堆術語,而且還有個拉風的名字,面向切面編程,都說是OOP的一種有益補充等等。一下子讓你不知所措,心想着:怪不得很多人都和我說aop多難多難。當我看進去以后,我才發現:它就是一些java基礎上的朴實無華的應用,包括ioc,包括許  許多多這樣的名詞,都是萬變不離其宗而已。

AOP概念

  AOP(Aspect Oriented Programming),即面向切面編程(也叫面向方面編程,面向方法編程)。其主要作用是,在不修改源代碼的情況下給某個或者一組操作添加額外的功能。像日志記錄,事務處理,權限控制等功能,都可以用AOP來“優雅”地實現,使這些額外功能  和真正的業務邏輯分離開來,軟件的結構將更加清晰。AOP是OOP的一個強有力的補充。

AOP的7個專業術語
  1.增強(Advice)
    增強就很好理解了,AOP(切面編程)是用來給某一類特殊的連接點,添加一些特殊的功能,那么我們添加的功能也就是增強啦~
    比如:添加日志、管理事務。
    不過增強不僅僅包含需要增加的功能代碼而已,它還包含了方位信息。
    那什么是方位信息呢?
    方位信息就是相對於方法的位置信息,如:方法前、方法后、方法環繞
    為什么要方位信息呢?切點不是確定了需要增強的位置了嗎?
    切點定位的是“在什么類的什么方法上”,也就是說,切點只是定位到了方法本身(也叫執行點,特殊的連接點),但是我們增強的內容是放在該方法的前面呢、后面呢?還是前后都要呢?這些切點卻沒有告訴我們,那么我們該如何確定具體位置呢?
    所以,我們才需要用到方位信息,進一步的定位到具體的增強代碼放置的位置。
    咦?增強即包含了【功能】又包含了【方位】,那我是不是不用切點就可以匹配哪些方法,並添加功能了呢?
    恩,確實如此,因為通過方位信息,雖然只是簡單的描述了【功能】需要放在方法前、后、還是前后都要等信息,但是我們還是可以通過方位定位到位置。只不過,是匹配到所有類的所有方法!因為方位只是說明在方法前還是方法后,並沒有要求是哪些類?哪    些方法? — So,我們可以直接使用增強來生成一個切面,而不需要切點,但這並不怎么推薦,因為它是匹配所有方法的。所以,我們才需要用切點來進一步確認位置。
  2.切點(Pointcut)
    一個項目中有很多的類,一個類有很多個連接點,當我們需要在某個方法前插入一段增強(advice)代碼時,我們就需要使用切點信息來確定,要在哪些連接點上添加增強。
    那么切點是什么?
    如果把連接點當做數據庫中的記錄,那么切點就是查找該記錄的查詢條件。
    所以,一般我們要實現一個切點時,那么我們需要判斷哪些連接點是符合我們的條件的,如:方法名是否匹配、類是否是某個類、以及子類等。
  3.連接點(Joinpoint)
    連接點就是程序執行的某個特定的位置,如:類開始初始化前、類初始化后、類的某個方法調用前、類的某個方法調用后、方法拋出異常后等。Spring 只支持類的方法前、后、拋出異常后的連接點。
  4.切面(Aspect)
    切面由切點和增強(或引介)組成,或者只由增強(或引介)實現。
  5.目標對象(Target)
    目標對象就是我們需要對它進行增強的業務類~
    如果沒有AOP,那么該業務類就得自己實現需要的功能。
  6.AOP代理(AOP proxy)
    一個類被AOP織入后生成出了一個結果類,它是融合了原類和增強邏輯的代理類。
  7.織入(Weaving)
    織入就是將增強添加到目標類具體連接點上的過程。
         編譯期織入,這要求使用特殊java編譯器
    類裝載期織入,這要求使用特殊的類裝載器
    動態代理織入,在運行期為目標類添加增強生成子類的方式
    Spring采用的是動態代理織入,而AspectJ采用編譯期織入和類裝載期織入。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM