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

Java中JDK動態(tài)代理的超詳細講解

 更新時間:2022年10月21日 08:58:54   作者:白胡子永遠  
JDK 的動態(tài)代理是基于攔截器和反射來實現(xiàn)的,JDK代理是不需要第三方庫支持的,只需要JDK環(huán)境就可以進行代理,下面這篇文章主要給大家介紹了關于Java中JDK動態(tài)代理的超詳細講解,需要的朋友可以參考下

1. 什么是動態(tài)代理?

動態(tài)代理是通過創(chuàng)建代理對象,在不改變原有代碼的基礎上,給程序增加新的功能,實現(xiàn)了程序的功能增強。

2.動態(tài)代理的實現(xiàn)方式有幾種?

  • JDK動態(tài)代理
  • CGLB動態(tài)代理

3. JDK動態(tài)代理

使用了JDK中的InvocationHandler接口,Method類和Proxy類。JDK的動態(tài)代理的要求:目標類必須要有接口。(目標類就是那個我們需要增強功能的方法所在的那個類,也是接口實現(xiàn)類所在的類)。我們通?;亟o目標類中要增強的方法增加上日志,事務等非業(yè)務功能。

4. CGLB動態(tài)代理

CGLB動態(tài)代理即Code Generation Library,是一個開源的第三方工具庫,其原理是繼承,去生成目標類的子類對象,這樣對子類的功能進行增強。但是要求:目標類不能用final修飾,目標類中的方法也不能被final修飾。

5.動態(tài)代理的效率

CGLB動態(tài)代理的效率要大于JDK動態(tài)代理的效率。

6.為什么要使用動態(tài)代理呢?

設計出來動態(tài)代理是為了解決一定的需求,因為在我們實際的開發(fā)過程中,經(jīng)常會遇到,要給寫好的某個方法的前面或者是后面增加方法,甚至是給好幾個類的方法增加新的功能。若是我們直接在方法上寫上新的增加的方法,就會顯得很亂,而且很冗余。

那么我們初步改進可以通過寫一個工具類去解決,在一個工具類中寫上我們要增強的方法,但是要求這些增強的方法是靜態(tài)修飾的,這樣我們就可以在原有的代碼上,使用類名.方法名的方式,來給原有的功能增加新的功能。這樣一定程度上的解決了代碼混亂的程度,但是還是不太完美。

再次改進:這個時候就是使用動態(tài)代理。

這就體現(xiàn)了動態(tài)代理的優(yōu)勢,即在不修改任何原有代碼的情況下,實現(xiàn)給原有功能的增強。

7. JDK動態(tài)代理詳細使用介紹

由于我們在Java項目中,直接使用動態(tài)代理的地方不多,所以我們都是使用的aspectj框架中寫好的動態(tài)代理。aspectj框架中的動態(tài)代理就是封裝的JDK動態(tài)代理。

下面將仔細介紹使用JDK動態(tài)代理的步驟:

  • 最好可以先創(chuàng)建一個工具類,將要增強的功能先寫好,這樣我們便可以一句代碼能調(diào)動這個用來增強的功能。
  • 自定義類,去實現(xiàn)InvocationHandler接口,并且,重寫invoke()方法。
  • 在這個自定義的類中,添加Objeck屬性,并且寫上有參的構造方法。
  • 在invoke()方法中寫上如下代碼

然后去主類中,使用動態(tài)代理,實現(xiàn)功能的增強。

注意:

上面的JDK動態(tài)代理的原理是反射機制。

我們可以使用proxy.getClass().getName()看到的值為com.sun.proxy.$Proxy

總結

到此這篇關于Java中JDK動態(tài)代理的文章就介紹到這了,更多相關Java JDK動態(tài)代理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 教你怎么用Java操作Redis

    教你怎么用Java操作Redis

    今天帶大家來學習怎么用Java操作Redis,文中有非常詳細的介紹,對正在學習java的小伙伴們有很好的幫助,建議有redis基礎并熟悉redis的基本數(shù)據(jù)類型命令的小伙伴學習,需要的朋友可以參考下
    2021-05-05
  • Java的異常體系以及File類構造方法詳解

    Java的異常體系以及File類構造方法詳解

    這篇文章主要為大家介紹了Java的異常體系以及File類構造方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 詳解如何通過Java實現(xiàn)類似Nginx代理

    詳解如何通過Java實現(xiàn)類似Nginx代理

    最近遇到一個問題,在內(nèi)網(wǎng)環(huán)境中部署的項目需要調(diào)用外網(wǎng)完成一些應用,一般情況我們可以通過增加一臺機器,部署到可以訪問外網(wǎng)的服務器上,然后內(nèi)網(wǎng)直接連接該機器通過Nginx進行代理即可,所以本文介紹了如何通過Java實現(xiàn)類似Nginx代理,需要的朋友可以參考下
    2024-08-08
  • Java容器類源碼詳解 Deque與ArrayDeque

    Java容器類源碼詳解 Deque與ArrayDeque

    這篇文章主要介紹了Java容器類源碼詳解 Deque與ArrayDeque,Deque 接口繼承自 Queue接口,但 Deque 支持同時從兩端添加或移除元素,因此又被成為雙端隊列。,需要的朋友可以參考下
    2019-06-06
  • Java在長字符串中查找短字符串的實現(xiàn)多種方法

    Java在長字符串中查找短字符串的實現(xiàn)多種方法

    這篇文章主要介紹了Java在長字符串中查找短字符串的實現(xiàn)多種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java實現(xiàn)經(jīng)典游戲超級瑪麗的示例代碼

    Java實現(xiàn)經(jīng)典游戲超級瑪麗的示例代碼

    在你的童年記憶里,是否有一個蹦跳、頂蘑菇的小人?本文將用java語言實現(xiàn)經(jīng)典游戲《超級瑪麗》,文中采用了swing技術進行了界面化處理,需要的可以參考一下
    2022-02-02
  • springboot后端配置多個數(shù)據(jù)源、Mysql數(shù)據(jù)庫的便捷方法

    springboot后端配置多個數(shù)據(jù)源、Mysql數(shù)據(jù)庫的便捷方法

    實現(xiàn)springboot 后端配置多個數(shù)據(jù)源、Mysql數(shù)據(jù)庫,只需要新建 Mapper、實體類 相應的文件夾,將不同數(shù)據(jù)源的文件保存到對應的文件夾下,添加綁定數(shù)據(jù)庫配置Config,就可以輕松完成
    2021-08-08
  • Java使用sftp定時下載文件的示例代碼

    Java使用sftp定時下載文件的示例代碼

    SFTP 為 SSH的其中一部分,是一種傳輸檔案至 Blogger 伺服器的安全方式。接下來通過本文給大家介紹了Java使用sftp定時下載文件的示例代碼,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-05-05
  • SpringBoot整合Thymeleaf的方法

    SpringBoot整合Thymeleaf的方法

    這篇文章主要介紹了SpringBoot整合Thymeleaf的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • JavaEE中struts2實現(xiàn)文件上傳下載功能實例解析

    JavaEE中struts2實現(xiàn)文件上傳下載功能實例解析

    這篇文章主要為大家詳細介紹了JavaEE中struts2實現(xiàn)文件上傳下載功能實例,感興趣的小伙伴們可以參考一下
    2016-05-05

最新評論

博野县| 巴青县| 景谷| 清水河县| 邻水| 偏关县| 界首市| 眉山市| 宁陕县| 阿拉善盟| 屏南县| 桐柏县| 旬邑县| 阳曲县| 万州区| 临洮县| 宜兰县| 威宁| 法库县| 仲巴县| 改则县| 莱州市| 行唐县| 河曲县| 珠海市| 赣州市| 泰和县| 崇信县| 德昌县| 会理县| 延寿县| 灯塔市| 南丹县| 卢氏县| 绥芬河市| 连城县| 惠水县| 阳原县| 东台市| 巴东县| 永清县|