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. PHP腳本的10個(gè)技巧(8)2. IntelliJ IDEA設(shè)置條件斷點(diǎn)的方法步驟3. XML入門(mén)精解之結(jié)構(gòu)與語(yǔ)法4. idea設(shè)置自動(dòng)導(dǎo)入依賴(lài)的方法步驟5. idea設(shè)置代碼格式化的方法步驟6. IntelliJ IDEA設(shè)置編碼格式的方法7. idea自定義快捷鍵的方法步驟8. UDDI FAQs9. idea重置默認(rèn)配置的方法步驟10.排行榜PHP腳本的10個(gè)技巧(8) 1. XML入門(mén)精解之結(jié)構(gòu)與語(yǔ)法 2. IntelliJ IDEA設(shè)置條件斷點(diǎn)的方法步驟 3. idea設(shè)置代碼格式化的方法步驟 4. IntelliJ IDEA設(shè)置編碼格式的方法 5. idea設(shè)置自動(dòng)導(dǎo)入依賴(lài)的方法步驟 6. idea自定義快捷鍵的方法步驟 7. 8. idea刪除項(xiàng)目的操作方法 9. IntelliJ IDEA配置Tomcat服務(wù)器的方法 10. IntelliJ IDEA設(shè)置背景圖片的方法步驟