當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
重新学习Spring2——IOC和AOP原理彻底搞懂
生活随笔
收集整理的這篇文章主要介紹了
重新学习Spring2——IOC和AOP原理彻底搞懂
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、AOP
1 Spring AOP 的實現原理
-
是對OOP編程方式的一種補充。翻譯過來為“面向切面編程”。
-
1 AspectJ是靜態代理的增強:所謂靜態代理就是AOP框架會在便一階段生成AOP代理類,也叫編譯器增強。
-
2 使用Spring AOP
- 與AspectJ 的靜態代理不同,Spring AOP使用的是動態代理,動態代理指AOP框架不會去修改字節碼,而是在內存中臨時生成一個AOP對象,這個AOP對象包含了目標對象的全部方法,并在特定的切點做了增強處理,并回調原對象的方法。
- Spring AOP中的動態代理有兩種:JDK動態代理(代理必須實現一個接口)、CGLIB動態代理(代理可以不實現接口)
- 幾個概念:
- 切面(Advisor):是AOP中的一個術語,表示從業務邏輯中分離出來的橫切邏輯,比如性能監控、日志處理、權限控制等。
這些功能都可以從核心的業務邏輯中抽離出去。可以解決代碼耦合的問題,職責更加單一。封裝了增強和切點。 - 增強(Advice):增強代碼的功能的類,橫切到代碼中。
- 目標:目標方法(JDK代理)或目標類(CGLIB代理)。
- 代理:通過ProxyFactory類生成,分為JDK代理、CGLIB代理。
- 切點:通過一個條件來匹配攔截的類,這個條件成為切點。
- 連接點:作為增強方法的入參,可以獲取目標方法的信息。
- 切面(Advisor):是AOP中的一個術語,表示從業務邏輯中分離出來的橫切邏輯,比如性能監控、日志處理、權限控制等。
- 增強
- 織入(Weaving):將切面應用到目標對象并導致代理對象創建的過程。
- 1 前置增強(Before):在目標方法前調用。
- 2 后置增強(AfterAdvice):在目標方法后調用。
- 3 環繞增強(AroundAdvice):將Before和After,甚至拋出增強和返回增強合到一起。
- 4 返回增強(AfterReturningAdvice):在方法返回結果后執行,該增強可以接收到目標方法返回的結果。
- 5 拋出增強(AfterThrowingAdvice):在目標方法拋出對應的類型后執行,可以接收到對應的異常信息。
- 引入增強(DeclareParentsAdvice):想讓程序在運行的時候動態實現某個接口,需要引入增強。
- 織入(Weaving):將切面應用到目標對象并導致代理對象創建的過程。
-
3 注解:Spring + AspectJ
- 1 對切面類添加 @Aspect 注解;將切面類和目標類放入到IOC容器中,可以通過<context:component-scan base-package=""/>進行掃描。
- 2 添加增強方法(包括增強類型和切點表達式,以及連接點)。
- 3 在Spring 配置文件中添加<aop:aspectj-autoproxy proxy-target-class="true"/> ,false表示只能代理接口(JDK動態代理),true表示代理類(CGLIB代理)。
-
3.1 通過切點表達式(AspectJ execution)進行攔截
- 步驟一:配置pox.xml:
- 步驟二:spring-config.xml
- 步驟三:編寫代碼,在這里我上傳一段測試代碼
-
3.2 通過切點注解表達式(AspectJ @annotation)進行攔截
- 開發步驟:
- 1 定義注解類
- 開發步驟:
- 2 為切面類中增強指定注解表達式
- 3 在目標類目標方法上標注注解
-
4 小的知識點
- 利用方法簽名編寫 AspectJ 切點表達式
- execution * com.sean.Calculator.* (…):匹配Calculator中聲明的所有方法,
第一個 * 代表任意修飾符及任意返回值。第二個 * 代表任意方法。…匹配任意數量的參數。若目標類與接口與該切面在同一個包中,可以省略包名。 - execution public * Calculator.*(…):匹配ArithmeticCalculator 接口的所有公有方法。
- execution public double Calculator.*(…):匹配Calculator中返回double類型數值的方法。
- execution public double Calculator.*(double, …):匹配第一個參數為double類型的方法,…匹配任意數量任意類型的參數。
- execution public double Calculator.*(double, double):匹配參數類型為double,double類型的方法。
- execution * com.sean.Calculator.* (…):匹配Calculator中聲明的所有方法,
- 可以結合切點表達式使用 &&, ||, ! 來合并。如:
- execution(void run()) || execution(void say())
- 切面優先級:
- 可以通過實現Ordered接口或利用@Order注解指定。
- 1 實現Ordered接口,getOrder()方法返回的值越小,優先級越高。
- 2 使用@Order注解,需要出現在注解中,同樣是值越小優先級越高。
- 利用方法簽名編寫 AspectJ 切點表達式
參考博客:https://blog.csdn.net/qq_16605855/article/details/73465865
總結
以上是生活随笔為你收集整理的重新学习Spring2——IOC和AOP原理彻底搞懂的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑显示屏如何变成电视机观看电视节目如何
- 下一篇: 电脑板cf怎么刷枪(cf怎么弄枪)