1. 程式人生 > >Spring的AOP的簡單介紹

Spring的AOP的簡單介紹

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
    是一個AOP的框架,Spring在意識到它的不足後,將AspectJ引入到了Spring的AOP中,作為自身的開發
  • Spring有兩套AOP的開發方式:(1)Spring傳統方式(棄用);(2)Spring基於AspectJAOP開發

3 AOP開發的相關術語

  • 連線點(JoinPoint):可以被攔截到的點,通俗的來說就是一個類中的方法就稱為連線點
  • 切入點(Pointcut):真正被攔截到的點,即一個類中真正被增強的方法,如上圖假設我們想要對save方法增強,。
  • 通知、增強(Advice):假設對save方法進行許可權校驗,那麼許可權校驗的方法(checkPri)就是通知;這是針對方法層面的增強
  • 引介(Introduction):類層面的增強,比如在類中新增一個屬性或者增加一個方法,這個類就被增強了,就稱為引介
  • 目標(Target):就是被增強的物件
  • 代理(proxy):當需要對一個方法增強時,需要生成一個代理
  • 切面(Aspect):多個通知和多個切入點的組合