天天看點

spring-9-AOP面向切面程式設計

文章目錄

  • ​​1.動态代理​​
  • ​​1.1JDK動态代理​​
  • ​​1.2CGLIB動态代理(了解)​​
  • ​​2.Aop:面向切面的程式設計,基于動态代理。​​
  • ​​1.可以使用JDK、cglib兩種代理方式​​
  • ​​2.Aop就是動态代理的規範化,把代理的步驟方式,都寫好了​​
  • ​​3.讓開發人員的用一種統一的代理方式,使用動态代理​​
  • ​​3.Aop(Aspect Orient Programming)面向切面程式設計​​
  • ​​4.三個關鍵的要素:​​
  • ​​5. aop的實作​​

1.動态代理

就是在原有的代碼不變的情況下添加功能

1.1JDK動态代理

要求:目标對象必須實作其接口,這個是java設計上的要求,原理是反射

1.2CGLIB動态代理(了解)

這個是一個開源的項目,原理是繼承,效率高于JDK代理

前者類不能是final

2.Aop:面向切面的程式設計,基于動态代理。

1.可以使用JDK、cglib兩種代理方式

2.Aop就是動态代理的規範化,把代理的步驟方式,都寫好了

3.讓開發人員的用一種統一的代理方式,使用動态代理

3.Aop(Aspect Orient Programming)面向切面程式設計

1)Aspect 切面:給你的目标添加功能,就是切面

常見的切面功能有,日志,事務,統計資訊,參數檢查,權限驗證

特點:,一般是非業務的的,獨立使用

2)JoinPoint:連接配接點,連接配接業務方法和切面的位置。就是某類中的業務方法

3)Pointcut:切入點,指多個連接配接點方法的集合。多個方法

4)目标對象:給那個類的方法添加功能,這個類就是目标對象

5)Advice:通知,同時表示切面功能執行的時間

4.三個關鍵的要素:

說一個切面有三個關鍵的要素:

1)切面的功能代碼,切面千什麼

2)切面的執行位置,使用Pointcut表示切 面執行的位登

3)切面的執行時間,使用Advice表示時間, 在目标方法之前,還是目标方法之後。

動态代理

實作方式: jdk動态代理, 使用jdk中的Proxy,. Method, Invoca i tonHanderl建立代理對象.

jdk動态代理要求目标類必須實作接口

cglib動态代理:第三方的工具庫,建立代理對象,原理是繼承。通過繼承目 标類,建立子類。

子類就是代理對象。要求 目标類不能是final的,

方法也不能是final的

動态代理的作用:

1)在目标類源代碼不改變的情況下,增加功能。,

2)減少代碼的重複

3)專注業務邏輯代碼

4)解耦合,讓你的業務功能和日志,事務非業務功能分離。

怎麼了解面向切面程式設計?

1)需要在分析項目功能時,找出切面。

2)合理的安排切面的執行時間(在目标方法前,還是目标方法後)

3)合理的安全切面執行的位置,在哪個類,哪個方法增加增強功能

5. aop的實作

  1. spring: 1.spring在内 部實作了aop規範,能做aop的工作。

    2.spring主要在事務處理時使用aop.

    3.我們項目開發中很少使用spring的aop實作。因 為spring的aop比較笨重.

  2. aspectJ: -一個開源的專門做aop的架構。spring框 架中內建了aspectj架構,通過spring就能使用aspectj的功能。aspectJ架構實作aop有兩種方式: