Java簡(jiǎn)單實(shí)現(xiàn)動(dòng)態(tài)代理模式過(guò)程解析
基本知識(shí):JDK動(dòng)態(tài)代理是java.lang.reflect.*包提供的方式,它必須借助一個(gè)接口才能生成代理對(duì)象.
步驟:
1、首先建一個(gè)接口類(lèi),并提供一個(gè)實(shí)現(xiàn)類(lèi):
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è)代理類(lèi),必須要實(shí)現(xiàn)InvocationHandler類(lèi)
public class JdkProxy implements InvocationHandler { public Object target; public JdkProxy(Object target) { this.target = target; } //第一個(gè)是類(lèi)加載器,采用了target本身的類(lèi)加載器 //第二個(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)方法邏輯的代理類(lèi),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è)試類(lèi)
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í)行前5add方法執(zhí)行后
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 解決Python 進(jìn)程池Pool中一些坑2. 三個(gè)不常見(jiàn)的 HTML5 實(shí)用新特性簡(jiǎn)介3. Python獲取抖音關(guān)注列表封號(hào)賬號(hào)的實(shí)現(xiàn)代碼4. Python使用jupyter notebook查看ipynb文件過(guò)程解析5. ajax請(qǐng)求添加自定義header參數(shù)代碼6. python利用os模塊編寫(xiě)文件復(fù)制功能——copy()函數(shù)用法7. Python如何讀寫(xiě)CSV文件8. php網(wǎng)絡(luò)安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì)探究9. php測(cè)試程序運(yùn)行速度和頁(yè)面執(zhí)行速度的代碼10. 無(wú)線標(biāo)記語(yǔ)言(WML)基礎(chǔ)之WMLScript 基礎(chǔ)第1/2頁(yè)
