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

基于jdk動態(tài)代理和cglib動態(tài)代理實現(xiàn)及區(qū)別說明

 更新時間:2023年05月06日 08:38:29   作者:yujiubo2008  
這篇文章主要介紹了基于jdk動態(tài)代理和cglib動態(tài)代理實現(xiàn)及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

jdk動態(tài)代理和cglib動態(tài)代理實現(xiàn)及區(qū)別

代理模式是一種設計模式,提供了對目標對象額外的訪問方式,即通過代理對象訪問目標對象,這樣可以在不修改原目標對象的前提下,提供額外的功能操作,擴展目標對象的功能。

代理模式又分為:

  • 靜態(tài)代理
  • jdk動態(tài)代理
  • cglib動態(tài)代理
  • 由于靜態(tài)代理會產(chǎn)生過多的代理類,一旦接口增加方法,目標對象與代理對象都要進行修改,不易維護。
  • 而動態(tài)代理是動態(tài)地在內(nèi)存中構(gòu)建代理對象,從而實現(xiàn)對目標對象的代理功能,接口增加方法時代理對象不受影響 。

下面我們講講jdk動態(tài)代理和cglib動態(tài)代理實現(xiàn)及區(qū)別

jdk動態(tài)代理實現(xiàn)

@Test
public void test(){
? ? IPerson target = new ManPerson();
? ? IPerson proxy = (IPerson)Proxy.newProxyInstance(
? ? ? ? target.getClass().getClassLoader(),?
? ? ? ? target.getClass().getInterfaces(),?
? ? ? ? new PersonInvocationHandler(target));
? ? proxy.eat();
? ? proxy.sleep();
}
// 代理對象
class PersonInvocationHandler implements InvocationHandler{
? ? private Object target;
? ? public PersonInvocationHandler(Object target){
? ? ? ? this.target = target;
? ? }
? ? @Override
? ? public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{
? ? ? ? System.out.println("start");
?? ?Object result = method.invoke(target, args);
?? ?System.out.println("end");
?? ?return result;
? ? }
}
// 目標對象
class ManPerson implements IPerson{
? ? @Override
? ? public void eat(){
?? ?System.out.println("吃飯中......");
? ? }
? ? @Override
? ? public void sleep(){
?? ?System.out.println("睡覺中......");
? ? }
}
// 目標對象接口
interface IPerson{
? ? void eat();
? ? void sleep();
}

cglib動態(tài)代理

@Test
public void test(){
? ? Person proxy = (Person)Enhancer.create(Person.class, new PersonMethodInterceptor());
? ? proxy.eat();
? ? proxy.sleep();
}
// 代理對象
class PersonMethodInterceptor implements MethodInterceptor{
? ? @Override
? ? public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable{
? ? ? ? System.out.println("start");
?? ?Object result = methodProxy.invokeSuper(o, objects);
?? ?System.out.println("end");
?? ?return result;
? ? }
}

目標對象

public class Person{
? ? public void eat(){
?? ?System.out.println("吃飯中......");
? ? }
? ? public void sleep(){
?? ?System.out.println("睡覺中......");
? ? }
}

區(qū)別

1.JDK動態(tài)代理是實現(xiàn)了被代理對象的接口,Cglib是繼承了被代理對象。

2.JDK和Cglib都是在運行期生成字節(jié)碼,JDK是直接寫Class字節(jié)碼,Cglib使用ASM框架寫Class字節(jié)碼,Cglib代理實現(xiàn)更復雜,生成代理類比JDK效率低。

3.JDK調(diào)用代理方法,是通過反射機制調(diào)用,Cglib是通過FastClass機制直接調(diào)用方法,Cglib執(zhí)行效率更高。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 顯示SonarQube私有項目徽章方案流程

    顯示SonarQube私有項目徽章方案流程

    這篇文章主要為大家介紹了如何顯示SonarQube私有項目徽章方案的流程,sonarQube目前不支持私有項目的徽章圖片獲取,這個問題早在?2018年就在sonar社區(qū)里有過激烈的討論,至今無果,只能自己尋求一種可以快速實施的方案
    2022-02-02
  • java對象轉(zhuǎn)型實例分析

    java對象轉(zhuǎn)型實例分析

    這篇文章主要介紹了java對象轉(zhuǎn)型的概念及用法,并以實例形式進行了較為詳細的介紹,需要的朋友可以參考下
    2014-10-10
  • Java實現(xiàn)多任務執(zhí)行助手

    Java實現(xiàn)多任務執(zhí)行助手

    這篇文章主要為大家詳細介紹了Java實現(xiàn)多任務執(zhí)行助手,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java線程安全問題小結(jié)_動力節(jié)點Java學院整理

    Java線程安全問題小結(jié)_動力節(jié)點Java學院整理

    這篇文章主要介紹了Java線程安全問題小結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 使用JMF實現(xiàn)java視頻播放器

    使用JMF實現(xiàn)java視頻播放器

    這篇文章主要為大家詳細介紹了使用JMF實現(xiàn)java視頻播放器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • java 中maven pom.xml文件教程詳解

    java 中maven pom.xml文件教程詳解

    這篇文章主要介紹了java 中maven pom.xml文件教程詳解,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 分享Java程序員應該知道的10個調(diào)試技巧

    分享Java程序員應該知道的10個調(diào)試技巧

    在本文中,作者將使用大家常用的的開發(fā)工具Eclipse來調(diào)試Java應用程序。但這里介紹的調(diào)試方法基本都是通用的,也適用于NetBeans IDE,我們會把重點放在運行時上面
    2012-09-09
  • http調(diào)用controller方法時openfeign執(zhí)行流程

    http調(diào)用controller方法時openfeign執(zhí)行流程

    這篇文章主要為大家介紹了http調(diào)用controller方法時openfeign執(zhí)行流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • windows下使用 intellij idea 編譯 kafka 源碼環(huán)境

    windows下使用 intellij idea 編譯 kafka 源碼環(huán)境

    這篇文章主要介紹了使用 intellij idea 編譯 kafka 源碼的環(huán)境,本文是基于windows下做的項目演示,需要的朋友可以參考下
    2021-10-10
  • 談談Java 線程池

    談談Java 線程池

    這篇文章主要介紹了Java 線程池的相關(guān)資料,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-08-08

最新評論

宁乡县| 通山县| 盖州市| 潢川县| 贵阳市| 库尔勒市| 万年县| 永胜县| 太仆寺旗| 诏安县| 廉江市| 蒲城县| 鄂温| 桐城市| 五大连池市| 穆棱市| 慈利县| 松溪县| 大洼县| 鄂尔多斯市| 遂昌县| 盐城市| 武邑县| 临夏市| 桃园县| 咸阳市| 广西| 和政县| 彭泽县| 新民市| 余庆县| 崇明县| 南郑县| 镇平县| 营山县| 东阳市| 玉溪市| 广宗县| 永寿县| 运城市| 巴中市|