AOP全稱 Aspect-Oriented Programming 即面向切面編程。怎麼樣,是否是感受很熟悉?對,相似的還有面向過程編程(Procedure-Oriented Programming),面向對象編程(Object-Oriented Programming)。若是對後面兩種編程方式有必定的瞭解,那麼對於AOP想必也就比較容易理解了。html
就像面向對象編程,關注點在於對象,即類。而面向切面編程理所固然關注於切面,那麼什麼是切面?能夠理解爲程序執行時的某個節點,或更具體一點,在某個方法執行以前,執行以後,返回以後等其它節點。java
AspectJ是一個基於Java語言的AOP框架,它採用編譯時加強,會將加強目標編譯獲得一個新的AOP代理類。正則表達式
Spring提供的AOP框架,使用了和AspectJ同樣的註解,可是經過動態生成代理類的方式生成AOP代理類。spring
Spring AOP中AOP代理的一種實現,使用原生JDK反射和動態代理生成AOP代理,須要代理類與目標實現相同的接口。編程
Spring AOP中AOP代理的另外一種實現,使用CGLib動態生成AOP代理類,須要代理類爲目標類的子類。框架
一個切面,能夠理解爲一個切面模塊,將相關的加強內容寫進同一個切面。例如:一個負責日誌的切面。代理
表明能夠由AOP加強織入的程序執行節點。日誌
所要作的加強處理htm
切入點,定義了將被Advice加強的一個或多個Join Point,可使用正則表達式或模式匹配。對象
被加強的目標對象
方法執行以前
方法執行以後
方法成功執行完成以後
方法拋出異常以後
環繞方法執行的整個週期