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

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

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

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

前言

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

Spring AOP的實(shí)現(xiàn)對(duì)于接口來(lái)說(shuō)就是使用的JDK的動(dòng)態(tài)代理來(lái)實(shí)現(xiàn)的,而對(duì)于類的代理使用CGLIB來(lái)實(shí)現(xiàn)。

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

使用

首先創(chuàng)建接口

public interface Subject {

 void test();
}

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

public class SubjectImpl implements Subject {

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

創(chuàng)建InvocationHandler實(shí)現(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);
 }
}

運(yùn)行結(jié)果:

before method! 
This is test method 
after method! 

總結(jié)

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

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

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

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

相關(guān)文章

  • spring boot 測(cè)試單元修改數(shù)據(jù)庫(kù)不成功的解決

    spring boot 測(cè)試單元修改數(shù)據(jù)庫(kù)不成功的解決

    這篇文章主要介紹了spring boot 測(cè)試單元修改數(shù)據(jù)庫(kù)不成功的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java語(yǔ)言通過(guò)三種方法實(shí)現(xiàn)隊(duì)列的示例代碼

    Java語(yǔ)言通過(guò)三種方法實(shí)現(xiàn)隊(duì)列的示例代碼

    這篇文章主要介紹了Java語(yǔ)言通過(guò)三種方法來(lái)實(shí)現(xiàn)隊(duì)列的實(shí)例代碼,數(shù)組模擬隊(duì)列,通過(guò)對(duì)定義的了解,發(fā)現(xiàn)隊(duì)列很像我們的數(shù)組,下面我們通過(guò)實(shí)踐給大家詳細(xì)介紹,需要的朋友可以參考下
    2022-02-02
  • java拓展集合工具類CollectionUtils

    java拓展集合工具類CollectionUtils

    這篇文章主要為大家詳細(xì)介紹了java拓展集合工具類CollectionUtils,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 深入解讀Java三大集合之map list set的用法

    深入解讀Java三大集合之map list set的用法

    集合彌補(bǔ)了數(shù)組的缺陷,它比數(shù)組更靈活更實(shí)用,可大大提高軟件的開(kāi)發(fā)效率,而且不同的集合適用于不同的場(chǎng)合,這篇文章帶你了解Java的三大集合map、list、set用法
    2021-11-11
  • 面試時(shí)必問(wèn)的JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)詳解

    面試時(shí)必問(wèn)的JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)詳解

    這篇文章主要介紹了JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Spring Bean的線程安全問(wèn)題

    Spring Bean的線程安全問(wèn)題

    Spring容器中的Bean是否線程安全,本文主要介紹了Spring Bean的線程安全問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 使用Feign調(diào)用第三方http接口

    使用Feign調(diào)用第三方http接口

    這篇文章主要介紹了使用Feign調(diào)用第三方http接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Feign調(diào)用服務(wù)時(shí)丟失Cookie和Header信息的解決方案

    Feign調(diào)用服務(wù)時(shí)丟失Cookie和Header信息的解決方案

    這篇文章主要介紹了Feign調(diào)用服務(wù)時(shí)丟失Cookie和Header信息的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java二維數(shù)組計(jì)算集合總結(jié)

    Java二維數(shù)組計(jì)算集合總結(jié)

    本篇文章給大家整理了關(guān)于Java二維數(shù)組計(jì)算集合的內(nèi)容總結(jié),有需要的讀者們可以參考下。
    2018-02-02
  • SpringBoot多種自定義錯(cuò)誤頁(yè)面方式小結(jié)

    SpringBoot多種自定義錯(cuò)誤頁(yè)面方式小結(jié)

    這篇文章主要介紹了SpringBoot多種自定義錯(cuò)誤頁(yè)面方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論