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

Java JDK 動態(tài)代理的使用方法示例

 更新時間:2017年07月18日 10:25:27   作者:再見理想2017  
Java 動態(tài)代理機制以巧妙的方式近乎完美地實踐了代理模式的設計理念。下面這篇文章主要給大家分享了關(guān)于Java JDK 動態(tài)代理的使用方法示例,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。

本文主要和大家分享介紹了關(guān)于Java JDK 動態(tài)代理使用的相關(guān)內(nèi)容,分享出來供大家參考學習,下面來一起看看詳細的介紹:

前言

代理是一種常用的設計模式,其目的就是為其他對象提供一個代理以控制對某個對象的訪問。代理類負責為委托類預處理消息,過濾消息并轉(zhuǎn)發(fā)消息,以及進行消息被委托類執(zhí)行后的后續(xù)處理。

Spring AOP的實現(xiàn)對于接口來說就是使用的JDK的動態(tài)代理來實現(xiàn)的,而對于類的代理使用CGLIB來實現(xiàn)。

JDK的動態(tài)代理,就是在程序運行的過程中,根據(jù)被代理的接口來動態(tài)生成代理類的class文件,并加載運行的過程。

使用

首先創(chuàng)建接口

public interface Subject {

 void test();
}

創(chuàng)建實現(xiàn)類

public class SubjectImpl implements Subject {

 @Override
 public void test() {
 System.out.println("This is test method");
 }
}

創(chuàng)建InvocationHandler實現(xiàn)類

public class SubjectInvocationHandler implements InvocationHandler {

 private Subject target;

 public SubjectInvocationHandler(Subject subject) {
 this.target = subject;
 }

 @Override
 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

 System.out.println("before method!");

 Object result = method.invoke(target, args);

 System.out.println("after method!");

 return result;
 }
}

最后調(diào)用:

public class DynamicProxy {


 public static void main(String args[]) {

 Subject subject = new SubjectImpl();

 Subject proxy = (Subject) Proxy.newProxyInstance(SubjectImpl.class.getClassLoader(), SubjectImpl.class.getInterfaces(), new SubjectInvocationHandler(subject));
 proxy.test();

 System.out.println(proxy);
 }
}

運行結(jié)果:

before method! 
This is test method 
after method! 

總結(jié)

1.通過實現(xiàn)InvocationHandler接口,在invoke方法中實現(xiàn)代理邏輯;

2.通過Proxy的newProxyInstance方法生成代理類,這里主要是根據(jù)被代理類的接口類型,通過反射創(chuàng)建代理類;

關(guān)于分析JDK動態(tài)代理這里有一篇很好的文章:Java JDK動態(tài)代理(AOP)的實現(xiàn)原理與使用詳析

好了,以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • java 對稱二叉樹的判斷

    java 對稱二叉樹的判斷

    這篇文章主要介紹了java 對稱二叉樹的判斷,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Spring Boot2.x如何自定義Endpoint

    Spring Boot2.x如何自定義Endpoint

    這篇文章主要介紹了Spring Boot2.x如何自定義Endpoint,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java Collections集合繼承結(jié)構(gòu)圖_動力節(jié)點Java學院整理

    Java Collections集合繼承結(jié)構(gòu)圖_動力節(jié)點Java學院整理

    這篇文章主要介紹了Java Collections集合繼承結(jié)構(gòu)圖_動力節(jié)點Java學院整理,需要的朋友可以參考下
    2017-04-04
  • Android應用開發(fā)的一般文件組織結(jié)構(gòu)講解

    Android應用開發(fā)的一般文件組織結(jié)構(gòu)講解

    這篇文章主要介紹了Android應用開發(fā)的一般文件組織結(jié)構(gòu)講解,同時附帶介紹了一個獲取Android的文件列表的方法,需要的朋友可以參考下
    2015-12-12
  • springboot 整合EhCache實現(xiàn)單服務緩存的操作方法

    springboot 整合EhCache實現(xiàn)單服務緩存的操作方法

    這篇文章主要介紹了springboot 整合EhCache實現(xiàn)單服務緩存的操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • java中拼接字符串的5種方法效率對比

    java中拼接字符串的5種方法效率對比

    這篇文章主要給大家介紹了關(guān)于java中拼接字符串的5種方法效率對比的相關(guān)資料,文中通過示例代碼和圖片介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-01-01
  • Java的垃圾強制回收實例分析

    Java的垃圾強制回收實例分析

    這篇文章主要介紹了Java的垃圾強制回收,結(jié)合實例形式分析了java垃圾強制回收的相關(guān)原理及實現(xiàn)方法,需要的朋友可以參考下
    2019-08-08
  • Spring中如何自定義監(jiān)聽器

    Spring中如何自定義監(jiān)聽器

    這篇文章將通過一個簡單的自定義的監(jiān)聽器,從源碼的角度分析一下Spring中監(jiān)聽的整個過程,分析監(jiān)聽的作用,感興趣的小伙伴可以了解一下
    2024-11-11
  • springboot打包不同環(huán)境配置以及shell腳本部署的方法

    springboot打包不同環(huán)境配置以及shell腳本部署的方法

    這篇文章主要給大家介紹了關(guān)于springboot打包不同環(huán)境配置以及shell腳本部署的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用springboot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • 注解@TableName,@TableField,pgsql的模式對應方式

    注解@TableName,@TableField,pgsql的模式對應方式

    這篇文章主要介紹了注解@TableName,@TableField,pgsql的模式對應方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論

阜南县| 平武县| 栾城县| 建昌县| 巴林右旗| 罗定市| 徐闻县| 江山市| 望谟县| 济阳县| 油尖旺区| 昌宁县| 隆化县| 平陆县| 罗城| 那坡县| 犍为县| 左云县| 炎陵县| 永州市| 高邮市| 保山市| 汝州市| 大兴区| 五大连池市| 阆中市| 沁水县| 广元市| 北碚区| 新干县| 新兴县| 林州市| 河南省| 江津市| 东明县| 栾城县| 弥勒县| 汝城县| 周口市| 金堂县| 浏阳市|