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

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

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

代理模式

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

A. 抽象主題角色

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

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

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

C. 真實主題角色

定義了代理角色所代表地真實對象

例如:

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

JDK動態(tài)代理

目標類
攔截器
代理類

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

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

用JDK動態(tài)代理模式重構hibernate事務

cglib動態(tài)代理

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

用cglib動態(tài)代理模式重構hibernate事務

spring兩種代理方式

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

2、若目標對象沒有實現(xiàn)任何接口,spring使用CGLIB庫生成目標對象的子類。
優(yōu)點:因為代理類與目標類是繼承關系,所以不需要有接口的存在。
缺點:因為沒有使用接口,所以系統(tǒng)的耦合性沒有使用JDK的動態(tài)代理好。

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

相關文章

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

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

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

    如何避免在Java項目里大批量使用if-else?

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

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

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

    詳談Java中net.sf.json包關于JSON與對象互轉的坑

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

    Maven插件之Dependency:analyze的使用

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

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

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

    Java中各種集合判空方法總結

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

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

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

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

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

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

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

最新評論