一.aop
*是面向切面程式設計,是作用在oop(物件導向程式設計)本質是乙個優化的動態**,可以對指定物件的指點地點動態引入各種通知;
-->oop:類.物件.方法.屬性
-->aop:切面.通知.切入點.連線點.切入目標物件.**物件.橫切關注點(重點:前.後.返.異.換五種通知)
動態**的優點:1.指定的目標方法. 2.輔助的**直接寫到指定的目標中. 3.實現分層減少耦合,方便維護
*一般的動態**和aop的動態**對比:
一般的動態**
①預設的jdk動態**只能為介面提供動態**
②使用預設的jdk動態**編寫略顯複雜
*使用spring的提供的aop
>1先導入乙個ajr包(一共十個)
>2加入aop命名空間,並配置檔案
>3新增註解;@aspect,會自動識別為乙個切面類
>4編寫通知方法,在方法上加四種註解
-->前置通知:@before後置通知@after返回通知@afterruturning異常通知@afterreturning環繞通知@around
(vlaue="executoin(public 型別 (方法的)全類名)") :固定格式,value的值必須有;
注意:1) 必須通過容器來接收而不是new乙個物件,
2) spring的aop不會對通知的返回值做嚴格的檢查,但是會對方法的引數列表多嚴格的檢查,引數型別對不上則報錯(不能出現aspectj以外的引數)
3) 使用afterthrowing要將異常的引數繫結時,可以通過
throwing屬性繫結:
@afterthrowing(value="mypointcut()",throwing="e"):宣告乙個異常通知;
*優先順序:@order
如果有多個需要aop的類,載入按照首字母a~z順序,可以通過@order進行更改,值越小優先順序越大
joinpoint方法呼叫:
string tostring(); //連線點所在位置的相關資訊
string toshortstring(); //連線點所在位置的簡短相關資訊
string tolongstring(); //連線點所在位置的全部相關資訊
object getthis(); //返回aop**物件
object gettarget(); //返回目標物件
object getargs(); //返回被通知方法引數列表
signature getsignature(); //返回當前連線點簽名
sourcelocation getsourcelocation();//返回連線點方法所在類檔案中的位置
string getkind(); //連線點型別
staticpart getstaticpart(); //返回連線點靜態部分
staticpart方法的呼叫:
signature getsignature(); //返回當前連線點簽名
string getkind(); //連線點型別
int getid(); //唯一標識
string tostring(); //連線點所在位置的相關資訊
string toshortstring(); //連線點所在位置的簡短相關資訊
string tolongstring(); //連線點所在位置的全部相關資訊
Spring學習總結 AOP的實現
一 springaop配置方式 兩種配置方式 1 基於spring配置檔案 1 定義乙個包含切面方法的bean aop bean 包含切面方法loggin public class logger after 通知 public void after around 通知 一定要 return publ...
Spring的AOP(一) 什麼是AOP
一 aop簡介 1.定義 將程式中的交叉業務邏輯 比如安全,日誌,事務等 封裝成乙個切面,然後注入到目標物件 具體業務邏輯 中去。聯想 過濾器 filter 2.aop 的實現方式 1 靜態織入 最複雜,最強大 在編譯階段,通過特殊的編譯器來實現把切面織入到目標物件 2 載入織入 在類的載入階段,通...
Spring中AOP學習 應用(一)
動態 指在程式執行期間動態的將某段 切入到指定方法指定位置進行執行的程式設計方式。1.匯入aop模組 spring aop spring aspects 2.定義乙個業務邏輯類 mathcalculator 在業務執行的時候將日誌執行列印 方法之前 方法執行結束 方法出現異常,3.定義乙個切面類 l...