1. 程式人生 > >Spring框架中2種生成代理對象的方法

Spring框架中2種生成代理對象的方法

style glib 生成 創建 業務層 false 如何 都是 ace

Spring框架中2種生成代理對象的方法

Jdk Proxy基於接口生成代理對象,只能賦值給接口的引用(默認使用jdk)。

Spring進一步封裝 CGLIB,基於實現類生成代理對象,既可以賦值給接口的引用,也可以賦值給實現類的引用

JDK提供的Proxy,和spring進一步封裝的CGLIB。二者生成的代理沒有任何區別,生成的都是代理對象。只是生產方式不同,前者是基於接口生成代理,後者基於實現類生成代理對象

如何切換spring框架中默認生成代理的方式

<aop:config proxy-target-class=”true|false”></aop:config>

True代表使用目標類生成代理

False代表使用jdk的proxy接口生成代理(默認)

Proxy(代理):靜態代理和動態代理

作用:起到傳遞會話的作用,中斷整個會話。

好處:在完成核心業務的同時,做一些附加的操作。

目標類(target):被代理類稱之為目標類。

開發代理的原則:和目標類功能一致且實現相同的接口。

靜態代理

開發一個代理類,手動的為每個業務類添加代理方法,能夠完成代理的功能。

問題:往往在開發中,書寫的不僅僅是一個或兩個業務層,開發的業務層有很多,如果為每一個業務層開發一個靜態代理類,不僅沒有減輕工作量,反而增加了工作量。於是就提出了動態代理的方法,為現有的業務層在運行的過程中動態創建代理類,通過動態代理類去解決現有業務層中業務代碼冗余的問題。

動態代理

通過jdk提供的proxy這個類,動態為現有的業務生成代理類。

Proxy.newProxyInstance(loader,interfaces,h); //返回值就是動態代理對象

參數一:當前線程類加載器

參數二:生成代理類的接口類型

參數三:通過代理對象調用方法是會優先進入參數三中的invoke方法

Spring框架中2種生成代理對象的方法