文章目錄
- 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的實作
-
spring: 1.spring在内 部實作了aop規範,能做aop的工作。
2.spring主要在事務處理時使用aop.
3.我們項目開發中很少使用spring的aop實作。因 為spring的aop比較笨重.
- aspectJ: -一個開源的專門做aop的架構。spring框 架中內建了aspectj架構,通過spring就能使用aspectj的功能。aspectJ架構實作aop有兩種方式: