成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:6日期: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、測(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)。

標(biāo)簽: Java
相關(guān)文章: