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ì)象下掛在哪些接口下面,該寫法就是將生成的代理對(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í)行前5add方法執(zhí)行后
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. arcgis js完整懸停效果實(shí)現(xiàn)demo2. .Net中Task Parallel Library的基本用法3. JavaScript實(shí)現(xiàn)form提交,回車提交URL地址偽靜態(tài) 原創(chuàng)4. Android 通過(guò)cmake的方式接入opencv的方法步驟5. ASP.NET Core自定義中間件的方式詳解6. 《CSS3實(shí)戰(zhàn)》筆記--漸變?cè)O(shè)計(jì)(二)7. css代碼優(yōu)化的12個(gè)技巧8. ASP.NET MVC使用typeahead.js實(shí)現(xiàn)輸入智能提示功能9. 使用IDEA編寫jsp時(shí)EL表達(dá)式不起作用的問(wèn)題及解決方法10. jsp實(shí)現(xiàn)登錄界面
