Java簡(jiǎn)單實(shí)現(xiàn)動(dòng)態(tài)代理模式過(guò)程解析
基本知識(shí):JDK動(dòng)態(tài)代理是java.lang.reflect.*包提供的方式,它必須借助一個(gè)接口才能生成代理對(duì)象.
步驟:
1、首先建一個(gè)接口類,并提供一個(gè)實(shí)現(xiàn)類:
public interface ISubject { public int add(int a, int b); }
public class Subject implements ISubject { @Override public int add(int a, int b) { return a + b; } }
2、創(chuàng)建一個(gè)代理類,必須要實(shí)現(xiàn)InvocationHandler類
public class JdkProxy implements InvocationHandler { public Object target; public JdkProxy(Object target) { this.target = target; } //第一個(gè)是類加載器,采用了target本身的類加載器 //第二個(gè)是把生成的動(dòng)態(tài)代理對(duì)象下掛在哪些接口下面,該寫(xiě)法就是將生成的代理對(duì)象放在target真實(shí)對(duì)象所實(shí)現(xiàn)的所有接口下.Subject對(duì)象的接口顯然是ISubject,代理對(duì)象可以這樣聲明:ISubject proxy =xxxx; //第三個(gè)是定義實(shí)現(xiàn)方法邏輯的代理類,this表示當(dāng)前對(duì)象,它`必須實(shí)現(xiàn)InvocationHandler接口的invoke方法,它就是代理邏輯方法. public Object getInstance() { Object o = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); return o; } //proxy:代理對(duì)象,就是getInstance方法生成的對(duì)象 //method,當(dāng)前調(diào)度的方法 //args:調(diào)度方法的參數(shù) @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println(method.getName() + "方法執(zhí)行前"); Object object = method.invoke(target, args); System.out.println(object); System.out.println(method.getName() + "方法執(zhí)行后"); return object; } }
3、測(cè)試類
public class ProxyTest { public static void main(String[] args) { Subject subject = new Subject(); JdkProxy jdk = new JdkProxy(subject); ISubject proxy = (ISubject) jdk.getInstance(); proxy.add(2, 3); } }
結(jié)果:
add方法執(zhí)行前
5
add方法執(zhí)行后
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java代理模式實(shí)例詳解【靜態(tài)代理與動(dòng)態(tài)代理】
- Java動(dòng)態(tài)代理模式的深入揭秘
- Java設(shè)計(jì)模式之動(dòng)態(tài)代理模式實(shí)例分析
- JAVA動(dòng)態(tài)代理模式(從現(xiàn)實(shí)生活角度理解代碼原理)
- java 代理模式及動(dòng)態(tài)代理機(jī)制深入分析
- 詳解java動(dòng)態(tài)代理模式
- java代理模式與動(dòng)態(tài)代理模式詳解
- 代理模式之Java動(dòng)態(tài)代理實(shí)現(xiàn)方法
- Java代理模式與動(dòng)態(tài)代理之間的關(guān)系以及概念
相關(guān)文章
Spring Cloud實(shí)現(xiàn)微服務(wù)調(diào)用的負(fù)載均衡(詳解)
負(fù)載均衡就是將負(fù)載(工作任務(wù),訪問(wèn)請(qǐng)求)進(jìn)行分?jǐn)偟蕉鄠€(gè)操作單元(服務(wù)器,組件)上進(jìn)行執(zhí)行,根據(jù)負(fù)載均衡發(fā)生位置的不同,一般分為服務(wù)端負(fù)載均衡和客戶端負(fù)載均衡,本文給大家介紹Spring Cloud實(shí)現(xiàn)微服務(wù)調(diào)用的負(fù)載均衡的相關(guān)知識(shí),感興趣的朋友一起看看吧2024-03-03java實(shí)現(xiàn)獲取網(wǎng)站的keywords,description
這篇文章主要介紹了java實(shí)現(xiàn)獲取網(wǎng)站的keywords,description的相關(guān)資料,需要的朋友可以參考下2015-03-03Spring Security 自動(dòng)踢掉前一個(gè)登錄用戶的實(shí)現(xiàn)代碼
這篇文章主要介紹了Spring Security 自動(dòng)踢掉前一個(gè)登錄用戶的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Mybatis多參數(shù)及實(shí)體對(duì)象傳遞實(shí)例講解
在使用Mybatis的時(shí)候,經(jīng)常會(huì)有各種各樣的參數(shù)傳遞,不同類型,不同個(gè)數(shù)的參數(shù),下面小編通過(guò)例子給大家講解下Mybatis多參數(shù)及實(shí)體對(duì)象傳遞,一起看看吧2016-12-12java集合_淺談Iterable和Iterator的區(qū)別
下面小編就為大家?guī)?lái)一篇java集合_淺談Iterable和Iterator的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09Spring mvc結(jié)果跳轉(zhuǎn)方法詳解
這篇文章主要介紹了Spring mvc結(jié)果跳轉(zhuǎn)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03