AOP概述

AOP爲Aspect Oriented Programming,意爲:面向切面編程

AOP是OOP(面向對象編程)的延續,是軟件開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生範型。
利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。
AOP採取橫向抽取機制,取代了傳統縱向繼承體系重複性代碼
經典應用:事務管理、性能監視、安全檢查、緩存 、日誌等【畫圖】
Spring AOP使用純Java實現,不需要專門的編譯過程和類加載器,在運行期通過代理方式向目標類織入增強代碼
AspectJ是一個基於Java語言的AOP框架,Spring2.0開始,Spring AOP引入對Aspect的支持,AspectJ擴展了Java語言,提供了一個專門的編譯器,在編譯時提供橫向代碼的織入

AOP實現原理:

  1. aop底層將採用代理機制進行實現。
  2. 接口 + 實現類 :可以採用 jdk 的Proxy來生成代理對象
  3. 有接口的實現類和沒有接口的類:都可以採用 cglib字節碼增強來實現代碼。

AOP術語:

1.target目標類,需要被代理的類。例如:UserService

2.Joinpoint(連接點):所謂連接點是指那些可能被攔截到的方法。例如:所有的方法

3.PointCut 切入點:已經被增強的連接點。例如:addUser()

4.advice 通知/增強增強代碼。例如:after、before

5. Weaving(織入):是指把增強advice應用到目標對象target來創建新的代理對象proxy的過程.

6.proxy 代理類

7. Aspect(切面): 是切入點pointcut和通知advice的結合

         一個線是一個特殊的面。

         一個切入點和一個通知,組成成一個特殊的面。

手動代理:

JDK動態代理:

目標類

切面類

工廠類

測試類

cglib 增強字節碼 

  1. 沒有接口,只有實現類。
  2. 採用字節碼增強框架 cglib,在運行時 創建目標類的子類,從而對目標類進行增強。
  3. 導入jar包:

自己導包(瞭解):

         核心:hibernate-distribution-3.6.10.Final\lib\bytecode\cglib\cglib-2.2.jar

         依賴:struts-2.3.15.3\apps\struts2-blank\WEB-INF\lib\asm-3.3.jar

         spring-core..jar 已經整合以上兩個內容

工廠類

測試結果

發佈了50 篇原創文章 · 獲贊 12 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章