Java 代理

学习自

静态代理

public interface Shopping {
    public void buy();
}
public class ShoppingImpl implements Shopping{
    @Override
    public void buy() {
        System.out.println("开始购物");
    }
}
public class StaticShoppingProxy implements Shopping{
    Shopping shopping;

    public StaticShoppingProxy(final Shopping shopping){
        this.shopping=shopping;
    }

    @Override
    public void buy() {
        System.out.println("出门");
        shopping.buy();
        System.out.println("回家");
    }
}
public class Test2 {
    public static void main(String[] args) {
        Shopping shopping = new ShoppingImpl();
        shopping.buy();
        StaticShoppingProxy staticShoppingProxy= new StaticShoppingProxy(shopping);
        staticShoppingProxy.buy();
    }
}

开始购物
出门
开始购物
回家

动态代理

public interface Shopping {
    public void buy();
    public String show(String things);
}
public class ShoppingImpl implements Shopping{
    @Override
    public void buy() {
        System.out.println("开始购物");
    }

    @Override
    public String show(String things) {
        return things;
    }
}
public class DynamicProxyHandler implements InvocationHandler {
    Object object;
    DynamicProxyHandler(Object object){
        this.object= object;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("***proxy:"+proxy.getClass()+",method:"+method+",args:"+args);
        if (args!=null){
            for(Object arg:args){
                System.out.println("  "+arg);
            }
        }
        System.out.println("出门");
        return method.invoke(object,args);
    }
}
public class Test2 {
    public static void main(String[] args) {
        Shopping shopping = new ShoppingImpl();
        shopping.buy();
        Shopping shoppingproxy = (Shopping) Proxy.newProxyInstance(Shopping.class.getClassLoader(), new Class[] {Shopping.class},new DynamicProxyHandler(shopping));
        if(shoppingproxy==null){
            System.out.println("空");
        }else {
            shoppingproxy.buy();
            shoppingproxy.show("wanda");
        }
    }
}

输出结果:

开始购物
***proxy:class com.sun.proxy.$ Proxy0,method:public abstract void test1_2020717.Shopping.buy(),args:null
出门
开始购物
***proxy:class com.sun.proxy.$Proxy0,method:public abstract java.lang.String test1_2020717.Shopping.show(java.lang.String),args:[Ljava.lang.Object;@2503dbd3
wanda
出门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值