Spring的AOP的簡單介紹
阿新 • • 發佈:2018-12-24
1.1 AOP概述
1.1.1 什麼是AOP?
- AOP:面向切面程式設計,AOP是OOP的擴充套件和延伸,解決OOP中遇到的問題
- AOP使用了橫向抽取代替了傳統的縱向繼承;下面有一個示例
- 假設Dao層在呼叫save方法儲存到資料庫前需要加上一個許可權校驗,傳統的方式是通過寫一個通用的BaseDao類並寫一個checkPri的許可權校驗方法,然後讓所有需要進行許可權校驗的類繼承通用BaseDao,那麼繼承BaseDao的類就均能夠在執行save方法前呼叫許可權校驗方法;這就是傳統的縱向繼承;
- 而橫向抽取是為所有的Dao生成一個代理,然後訪問的時候就是訪問代理物件UserDaoProxy
1.1.2 Spring底層AOP實現
Spring底層的AOP採用了兩種動態代理:
- Jdk動態代理:只能對實現介面的類產生代理
- Cglib動態代理(類似於Javassist第三方代理技術,不要用final修飾類):對沒有實現介面的類產生代理物件,生成子類物件
- 兩種代理的簡單示例:https://blog.csdn.net/W2612888/article/details/85225577
2 Spring的AOP的簡介
- AOP思想最早是由AOP聯盟組織提出的,Spring是使用這種思想最好的框架。
- Spring的AOP原來有自己實現的方式(非常繁瑣)。AspectJ
- Spring有兩套AOP的開發方式:(1)Spring傳統方式(棄用);(2)Spring基於AspectJ的AOP開發
3 AOP開發的相關術語
- 連線點(JoinPoint):可以被攔截到的點,通俗的來說就是一個類中的方法就稱為連線點
- 切入點(Pointcut):真正被攔截到的點,即一個類中真正被增強的方法,如上圖假設我們想要對save方法增強,。
- 通知、增強(Advice):假設對save方法進行許可權校驗,那麼許可權校驗的方法(checkPri)就是通知;這是針對方法層面的增強
- 引介(Introduction):類層面的增強,比如在類中新增一個屬性或者增加一個方法,這個類就被增強了,就稱為引介
- 目標(Target):就是被增強的物件
- 代理(proxy):當需要對一個方法增強時,需要生成一個代理
- 切面(Aspect):多個通知和多個切入點的組合