欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

代理模式

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

A. 抽象主題角色

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

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

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

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

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

例如:

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

JDK動態(tài)代理

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

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

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

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

cglib動態(tài)代理

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

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

spring兩種代理方式

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

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

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

相關(guān)文章

  • 本地安裝Nacos的踩坑過程及解決

    本地安裝Nacos的踩坑過程及解決

    這篇文章主要介紹了本地安裝Nacos的踩坑過程及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 如何避免在Java項(xiàng)目里大批量使用if-else?

    如何避免在Java項(xiàng)目里大批量使用if-else?

    想起剛開始接觸JAVA時(shí),若遇到大量流程判斷語句,幾乎滿屏都是if-else語句,多得讓自己都忘了哪里是頭,哪里是尾,但是,縱然滿屏是if-else,但彼時(shí)也沒有覺得多別扭.等到編程能力漸漸提升之后,再回過頭去看曾經(jīng)寫過的滿屏if-else時(shí),感覺全都是翔.....,需要的朋友可以參考下
    2021-06-06
  • 在IDEA里gradle配置和使用的方法步驟

    在IDEA里gradle配置和使用的方法步驟

    這篇文章主要介紹了在IDEA里gradle配置和使用的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳談Java中net.sf.json包關(guān)于JSON與對象互轉(zhuǎn)的坑

    詳談Java中net.sf.json包關(guān)于JSON與對象互轉(zhuǎn)的坑

    下面小編就為大家分享一篇Java中net.sf.json包關(guān)于JSON與對象互轉(zhuǎn)的坑,具有很好的參考價(jià)值,希望對大家有所幫助
    2017-12-12
  • Maven插件之Dependency:analyze的使用

    Maven插件之Dependency:analyze的使用

    在軟件開發(fā)中,合理管理項(xiàng)目依賴是保證構(gòu)建穩(wěn)定性的關(guān)鍵,Maven作為流行的項(xiàng)目管理工具,提供了Dependency插件來幫助開發(fā)者分析和優(yōu)化項(xiàng)目依賴,通過執(zhí)行dependency:analyze指令,可以辨識項(xiàng)目中使用的、未聲明的、和未使用的依賴項(xiàng)
    2024-10-10
  • Java?Swing實(shí)現(xiàn)掃雷源碼

    Java?Swing實(shí)現(xiàn)掃雷源碼

    這篇文章主要為大家詳細(xì)介紹了Java?Swing實(shí)現(xiàn)掃雷源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java中各種集合判空方法總結(jié)

    Java中各種集合判空方法總結(jié)

    最近接觸集合比較多,經(jīng)常對于集合是否為空做判斷,下面這篇文章主要給大家介紹了關(guān)于Java中各種集合判空方法總結(jié)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 深入了解Java File分隔符和Path分隔符的使用

    深入了解Java File分隔符和Path分隔符的使用

    不同的操作系統(tǒng)使用不同的字符作為文件和路徑分隔符。當(dāng)我們的應(yīng)用程序需要在多個(gè)平臺上運(yùn)行時(shí),我們需要正確處理這些問題。Java幫助我們選擇一個(gè)合適的分隔符,本文就來聊聊Java中File分隔符和 Path分隔符的使用
    2022-07-07
  • java愛心代碼完整示例(脫單必備)

    java愛心代碼完整示例(脫單必備)

    最近看到個(gè)好玩的,就是用代碼實(shí)現(xiàn)愛心的形狀,對于不懂編程的人來說,這是一個(gè)很好的玩的東西,這篇文章主要給大家介紹了關(guān)于java愛心代碼的相關(guān)資料,需要的朋友可以參考下
    2023-07-07
  • Java中為什么不同的返回類型不算方法重載

    Java中為什么不同的返回類型不算方法重載

    這篇文章主要介紹了Java中為什么不同的返回類型不算方法重載,方法重載是指在同一個(gè)類中,定義了多個(gè)同名方法,但每個(gè)方法的參數(shù)類型或者是參數(shù)個(gè)數(shù)不同就是方法重載,下文詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-05-05

最新評論