AOP爲Aspect Oriented Programming,意爲:面向切面編程
AOP是OOP(面向對象編程)的延續,是軟件開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生範型。
利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。
AOP採取橫向抽取機制,取代了傳統縱向繼承體系重複性代碼
經典應用:事務管理、性能監視、安全檢查、緩存 、日誌等【畫圖】
Spring AOP使用純Java實現,不需要專門的編譯過程和類加載器,在運行期通過代理方式向目標類織入增強代碼
AspectJ是一個基於Java語言的AOP框架,Spring2.0開始,Spring AOP引入對Aspect的支持,AspectJ擴展了Java語言,提供了一個專門的編譯器,在編譯時提供橫向代碼的織入
AOP實現原理:
- aop底層將採用代理機制進行實現。
- 接口 + 實現類 :可以採用 jdk 的Proxy來生成代理對象。
- 有接口的實現類和沒有接口的類:都可以採用 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 增強字節碼
- 沒有接口,只有實現類。
- 採用字節碼增強框架 cglib,在運行時 創建目標類的子類,從而對目標類進行增強。
- 導入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 已經整合以上兩個內容
工廠類
測試結果