關於spring的概述與簡單示例2

spring整合單元測試(注意junit的版本4.10)

關於spring的概述與簡單示例2

關於AOP之前先說一下動態代理:

(基於接口的動態代理,被代理對象至少實現一個接口)

創建Actor接口

關於spring的概述與簡單示例2

實現actor接口

關於spring的概述與簡單示例2

創建動態代理對象(注意返回值object 在原有的接口方法中是沒有返回值的,但是void是類Void的另一種寫法,Void繼承於object,代理方法有返回值並不奇怪)

關於spring的概述與簡單示例2

代碼增強示例:

關於spring的概述與簡單示例2

測試:並沒輸出123或者456,方法被攔截

關於spring的概述與簡單示例2

基於子類的動態代理(需要cglib jar包)

關於spring的概述與簡單示例2

關於spring的概述與簡單示例2

自定義連接池示例:

創建一個數據庫的配置文件,放在src目錄下

關於spring的概述與簡單示例2

創建一個獲取數據庫連接的實體類,使用ResourceBundle讀取剛創建的配置文件

關於spring的概述與簡單示例2

定義連接池:

關於spring的概述與簡單示例2

測試成功:

關於spring的概述與簡單示例2

所以當我們使用close方法關閉連接後,連接池數量減少,並沒有重新放回池中。

這時候就需要之前用到的創建代理對象將連接放回池中:

特別需要注意的是mysql的jar 需要5.0.8版本的,高級的版本會報類型強轉的異常

關於spring的概述與簡單示例2

測試成功:

關於spring的概述與簡單示例2

關於AOP

面向側面的程序設計(aspect-oriented programming,AOP,又譯作面向方面的程序設計、觀點導向編程、剖面導向程序設計)是計算機科學中的一個術語,指一種程序設計範型。該範型以一種稱為側面(aspect,又譯作方面)的語言構造為基礎,側面是一種新的模塊化機制,用來描述分散在對象、類或函數中的橫切關注點(crosscutting concern)。

側面的概念源於對面向對象的程序設計的改進,但並不只限於此,它還可以用來改進傳統的函數。與側面相關的編程概念還包括元對象協議、主題(subject)、混入(mixin)和委託。

連接點(joinpoint):指那些被攔截到的點。在spring中,這些點指方法,因為spring只支持方法的連接點。我們一般去業務層(service),那些業務接口就是連接點。

切入點(pointcut):對連接點的方法進行增強的就是切入點,如上面被動態代理的方法

通知(advice):攔截到連接點之後要做的事情就是通知(前置通知,後置通知,異常通知,最終通知,環繞通知)

代碼在method.invoke(method, args) 之前的是前置通知,之後後置通知,異常捕捉就是異常通知,finally則是最終通知,環繞通知是指從前置通知到最終通知的部分


關於spring的概述與簡單示例2

目標對象(target):代理的目標對象

織入(weaving):增強應用到目標對象來創建代理對象的過程

代理(proxy):產生一個代理對象

切面(aspect):切入點和通知的結合

關於AOP配置(xml方式)

相關約束:


關於spring的概述與簡單示例2

關於spring的概述與簡單示例2

關於spring的概述與簡單示例2

關於spring的概述與簡單示例2

測試成功:

關於spring的概述與簡單示例2

當然切入點表達式也可以使用通配符的方式,我覺得因情況而異,不管哪種都可以。需要注意的是,參數列表也可以使用通配符 *,但此方法必須要有參數才行。或者使用 .. 表示有無參數均可。

實際開發中,只對業務層進行切入,所以前面的包名一般不使用通配符。

關於spring的概述與簡單示例2

通知類型示例:

關於spring的概述與簡單示例2

關於spring的概述與簡單示例2

測試成功:

關於spring的概述與簡單示例2

當我們使用環繞通知的時候,切入點的方法不會執行,而會去執行通知裡面的方法

關於spring的概述與簡單示例2

測試:並未出現保存用戶信息的字樣,所以切入點的方法未執行(環繞通知是指動態代理中invoke()方法)
關於spring的概述與簡單示例2

其他文件不動的情況下,只修改環繞通知的方法,可以這樣寫

關於spring的概述與簡單示例2

測試:

關於spring的概述與簡單示例2

通過註解的方式配置AOP

xml文件的配置:

關於spring的概述與簡單示例2

註解使用:

關於spring的概述與簡單示例2

測試:

關於spring的概述與簡單示例2

xml配置方式

關於spring的概述與簡單示例2

配置事務的屬性

關於spring的概述與簡單示例2

xml約束:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-2.5.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.1.xsd

http://www.springframework.org/schema/cache

http://www.springframework.org/schema/cache/spring-cache.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

所需的jar:

關於spring的概述與簡單示例2

百度網盤:鏈接(防和諧):1MUgjilSFqJsaQJxscT7bCQ 密碼:mlgf


分享到:


相關文章: