动态代理模式

java中的代理
1:java的静态代理
通常把前面自己实现的代理模式,成为java的静态代理。这种实现方式有一个较大的缺点,就是如果Subject接口发生变化,那么代理类和具体的目标实现都要变化,不是很灵活
2:java的动态代理
通常把使用java内建的对代理模式支持的功能来实现的代理称为java的动态代理。动态代理跟静态代理相比,明显的变化是:静态代理实现的时候,在Subject接口上定义很多的方法,代理类里面自然也要实现很多方法;而动态代理实现的时候,虽然Subject接口上定义了很多方法,但是动态代理类始终只有一个invoke方法。这样当Subject接口发生变化的时候,动态代理的接口就不需要跟着变化了。
java动态代理机制详解

//使用java中的动态代理
public class DynamicProxy implements InvocationHandler {
    //被代理的对象
    private OrderApi order = null;
    //获取绑定好代理和具体目标对象后的目标对象的接口
    public OrderApi getProxyInterface(Order order) {
        //设置被代理的对象,好方便invoke里面的操作
        this.order = order;
        //把真正的订单对象和动态代理关联起来
        OrderApi orderApi = (OrderApi) Proxy.newProxyInstance(
                order.getClass().getClassLoader(),
                order.getClass().getInterfaces(),
                this
        );

        return orderApi;
    }
    public Object invoke(Object proxy, Method method, Ojbect[] args) throws Throwable {
        //如果是调用setter方法就需要检查权限
        if (method.getName().startWith("set")) {
            //如果不是创建人,那就不能修改
            if (order.getOrderUser() != null && order.getOrderUser().equals(args[1])) {
                //可以操作
                return method.invoke(order, args);
            } else {
                System.out.println("对不起"+args[1]+",你无权修改本订单中的数据");
            }
        } else {
            //不是调用的setter方法就继续运行
            return method.invoke(order, args);
        }

        return null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值