久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術(shù)文章
文章詳情頁

Java簡單實(shí)現(xiàn)動(dòng)態(tài)代理模式過程解析

瀏覽:2日期:2022-08-29 08:15:33

基本知識(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、測試類

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í)行后

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 齐河县| 蕉岭县| 九台市| 虞城县| 齐河县| 若羌县| 南靖县| 原阳县| 贡嘎县| 宜宾市| 秭归县| 泰来县| 故城县| 玉屏| 大关县| 茂名市| 鹤壁市| 玛曲县| 威信县| 兴城市| 文成县| 丘北县| 宝山区| 图木舒克市| 兴宁市| 普安县| 措勤县| 宁城县| 西峡县| 蓬莱市| 淮南市| 长宁区| SHOW| 深水埗区| 宜丰县| 石嘴山市| 文昌市| 上栗县| 乌鲁木齐市| 板桥市| 颍上县|