代理模式(动态代理)

动态代理

动态代理和静态代理角色一样
动态代理的代理类是生成的,不是我们直接写好的
动态代理分为两大类:基于接口的动态代理,基于类的动态代理
  基于接口:JDK动态代理
  基于类:cglib
  java字节码实现:javasist

需要了解两个类:Proxy:生成代理对象,InvocationHandler:调用处理程序

生成代理对象类(基于接口)

//工具类
public class ProxyInvocationHandler implements InvocationHandler {
    //被代理接口
    private Object target;

    public void setTarget(Object target) {
        this.target = target;
    }

    //获取代理实例
    public Object getProxy(){
        return  Proxy.newProxyInstance(this.getClass().getClassLoader(),
                target.getClass().getInterfaces(),this);
    }
    //处理代理实例
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        msg(method.getName());
        Object object = method.invoke(target, args);
        return object;

    }
    public void msg(String ms){
        System.out.println("执行了"+ms+"方法");
    }
}

接口类

public interface UserService {
    public void insert();
    public void delete();
    public void update();
    public void query();
}

实现类

public class ServiceImpl implements UserService {
    @Override
    public void insert() {
        System.out.println("添加一条");
    }
    @Override
    public void delete() {
        System.out.println("删除一条");
    }
    @Override
    public void update() {
        System.out.println("修改一条");
    }
    @Override
    public void query() {
        System.out.println("查询一条");
    }
}

测试类

public class Client {
    public static void main(String[] args) {
        ServiceImpl userService = new ServiceImpl();
        ProxyInvocationHandler handler = new ProxyInvocationHandler();
        handler.setTarget(userService);//设置被代理对象
        UserService proxy = (UserService)handler.getProxy();//动态生成代理对象
        proxy.delete();
    }
}

动态代理的好处

静态代理的好处都有。
一个动态代理类代理的是一个接口。一般就是对应的一类业务
一个动态代理类可以代理多个类,只要是实现了同一个接口即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值