最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Spring的兩種代理方式:JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理

 更新時(shí)間:2018年04月19日 11:29:06   作者:c.  
這篇文章主要介紹了詳解Spring的兩種代理方式:JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

代理模式

代理模式的英文叫做Proxy或Surrogate,中文都可譯為”代理“,所謂代理,就是一個(gè)人或者一個(gè)機(jī)構(gòu)代表另一個(gè)人或者另一個(gè)機(jī)構(gòu)采取行動(dòng)。在一些情況下,一個(gè)客戶不想或者不能夠直接引用一個(gè)對(duì)象,而代理對(duì)象可以在客戶端和目標(biāo)對(duì)象之間起到中介的作用

A. 抽象主題角色

聲明了真實(shí)主題和代理主題的共同接口,這樣一來(lái)在任何可以使用真實(shí)主題的地方都可以是使用代理主題

B. 代理主題(Proxy)角色:

代理主題角色內(nèi)部含有對(duì)真實(shí)主題的引用,從而可以在任何時(shí)候操作真實(shí)主題對(duì)象;代理主題角色提供一個(gè)與真實(shí)主題角色相同的接口,以便可以在任何時(shí)候都可以替代真實(shí)主題控制對(duì)真實(shí)主題的引用,負(fù)責(zé)在需要的時(shí)候創(chuàng)建真實(shí)主題對(duì)象(和刪除真實(shí)主題對(duì)象);代理角色通常在將客戶端調(diào)用傳遞給真實(shí)的主題之前或之后,都要執(zhí)行某個(gè)操作,而不是單純地將調(diào)用傳遞給真實(shí)主題對(duì)象。

C. 真實(shí)主題角色

定義了代理角色所代表地真實(shí)對(duì)象

例如:

用動(dòng)態(tài)代理模式重構(gòu)

JDK動(dòng)態(tài)代理

目標(biāo)類(lèi)
攔截器
代理類(lèi)

總結(jié):1、因?yàn)槔肑DKProxy生成的代理類(lèi)實(shí)現(xiàn)了接口,所以目標(biāo)類(lèi)中所有的方法在代理類(lèi)中都有。
2、生成的代理類(lèi)的所有的方法都攔截了目標(biāo)類(lèi)的所有的方法。而攔截器中invoke方法的內(nèi)容正好就是代理類(lèi)的各個(gè)方法的組成體。
3、利用JDKProxy方式必須有接口的存在。
4、invoke方法中的三個(gè)參數(shù)可以訪問(wèn)目標(biāo)類(lèi)的被調(diào)用方法的API、被調(diào)用方法的參數(shù)、被調(diào)用方法的返回類(lèi)型。

用JDK動(dòng)態(tài)代理模式重構(gòu)

用JDK動(dòng)態(tài)代理模式重構(gòu)hibernate事務(wù)

cglib動(dòng)態(tài)代理

1、 CGlib是一個(gè)強(qiáng)大的,高性能,高質(zhì)量的Code生成類(lèi)庫(kù)。它可以在運(yùn)行期擴(kuò)展Java類(lèi)與實(shí)現(xiàn)Java接口。
2、 用CGlib生成代理類(lèi)是目標(biāo)類(lèi)的子類(lèi)。
3、 用CGlib生成 代理類(lèi)不需要接口
4、 用CGLib生成的代理類(lèi)重寫(xiě)了父類(lèi)的各個(gè)方法。
5、 攔截器中的intercept方法內(nèi)容正好就是代理類(lèi)中的方法體

用cglib動(dòng)態(tài)代理模式重構(gòu)hibernate事務(wù)

spring兩種代理方式

1、若目標(biāo)對(duì)象實(shí)現(xiàn)了若干接口,spring使用JDK的java.lang.reflect.Proxy類(lèi)代理。
優(yōu)點(diǎn):因?yàn)橛薪涌?,所以使系統(tǒng)更加松耦合
缺點(diǎn):為每一個(gè)目標(biāo)類(lèi)創(chuàng)建接口

2、若目標(biāo)對(duì)象沒(méi)有實(shí)現(xiàn)任何接口,spring使用CGLIB庫(kù)生成目標(biāo)對(duì)象的子類(lèi)。
優(yōu)點(diǎn):因?yàn)榇眍?lèi)與目標(biāo)類(lèi)是繼承關(guān)系,所以不需要有接口的存在。
缺點(diǎn):因?yàn)闆](méi)有使用接口,所以系統(tǒng)的耦合性沒(méi)有使用JDK的動(dòng)態(tài)代理好。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在IDEA中創(chuàng)建父工程和子模塊module的方法步驟

    在IDEA中創(chuàng)建父工程和子模塊module的方法步驟

    這篇文章主要介紹了在IDEA中創(chuàng)建父工程和子模塊module的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 詳解Spring如何掃描自定義的注解

    詳解Spring如何掃描自定義的注解

    本文給大家詳細(xì)介紹了Spring如何掃描自定義的注解,在Spring中,可以使用注解來(lái)實(shí)現(xiàn)依賴(lài)注入、AOP等功能,同時(shí),Spring也支持自定義注解,使得開(kāi)發(fā)人員可以更靈活地使用注解,需要的朋友可以參考下
    2024-02-02
  • Java Thread之Sleep()使用方法總結(jié)

    Java Thread之Sleep()使用方法總結(jié)

    這篇文章主要介紹了Java Thread之Sleep()使用方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • SpringBoot與SpringSecurity整合方法附源碼

    SpringBoot與SpringSecurity整合方法附源碼

    這篇文章主要介紹了SpringBoot與SpringSecurity整合,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Java代碼實(shí)現(xiàn)酒店管理系統(tǒng)

    Java代碼實(shí)現(xiàn)酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java代碼實(shí)現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 詳解如何判斷Java線程池任務(wù)已執(zhí)行完

    詳解如何判斷Java線程池任務(wù)已執(zhí)行完

    線程池的使用并不復(fù)雜,麻煩的是如何判斷線程池中的任務(wù)已經(jīng)全部執(zhí)行完了,所以接下來(lái),我們就來(lái)看看如何判斷線程中的任務(wù)是否已經(jīng)全部執(zhí)行完吧
    2023-08-08
  • java多線程之線程同步七種方式代碼示例

    java多線程之線程同步七種方式代碼示例

    這篇文章主要介紹了java多線程之線程同步七種方式代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • SpringLDAP連接LDAPS證書(shū)報(bào)錯(cuò)問(wèn)題及解決

    SpringLDAP連接LDAPS證書(shū)報(bào)錯(cuò)問(wèn)題及解決

    這篇文章主要介紹了SpringLDAP連接LDAPS證書(shū)報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java中文件的讀寫(xiě)方法之IO流詳解

    Java中文件的讀寫(xiě)方法之IO流詳解

    這篇文章主要介紹了Java中文件的讀寫(xiě)方法之IO流詳解,本文中的代碼所涉及到的路徑或者文件都是本人的,大家得換成自己的,并且大家可以在網(wǎng)上自行找一些材料作為讀入或者寫(xiě)入的材料,不過(guò)路徑最好是英文的,不要包含中文,防止JVM讀取失敗
    2022-04-04
  • 將Mybatis升級(jí)為Mybatis-Plus的詳細(xì)過(guò)程

    將Mybatis升級(jí)為Mybatis-Plus的詳細(xì)過(guò)程

    本文詳細(xì)介紹了在若依管理系統(tǒng)(v3.8.8)中將MyBatis升級(jí)為MyBatis-Plus的過(guò)程,旨在提升開(kāi)發(fā)效率,通過(guò)本文,開(kāi)發(fā)者可實(shí)現(xiàn)系統(tǒng)功能無(wú)損升級(jí),同時(shí)享受MyBatis-Plus帶來(lái)的便捷特性,如代碼簡(jiǎn)化和性能優(yōu)化,需要的朋友可以參考下
    2025-04-04

最新評(píng)論

松原市| 清远市| 华宁县| 进贤县| 富蕴县| 建阳市| 砀山县| 乌拉特中旗| 安多县| 台南市| 大方县| 盐津县| 和田市| 江油市| 元朗区| 祁东县| 尚志市| 兴文县| 修水县| 潞城市| 临夏市| 南城县| 灵寿县| 平顺县| 通河县| 遂溪县| 互助| 济南市| 阿克苏市| 临沧市| 文水县| 水城县| 城市| 松溪县| 武宣县| 肃宁县| 潍坊市| 从化市| 富蕴县| 密云县| 馆陶县|