Java中jdk动态代理的基本实现

场景:

假设我们现在有两个模块,分别是

1.上班模块 2.打卡模块

我们为了可以降低它们之间的耦合度,可以用动态代理来实现

案例:

一、创建员工接口

public interface EmployeService {
    void work();
}

二、实现员工接口

public class EmployeServiceImpl implements EmployeService{

    @Override
    public void work() {
        System.out.println("工作..........");
    }
}

三、创建一个类实现InvocationHandler接口

1.添加构造函数,传入的target对象为待会要动态代理的对象

2.重写invoke方法

public class MyInvocationHandler implements InvocationHandler {
    private Object target;
    
    public MyInvocationHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //通过代理对象执行方法时,会调用执行这个invoke()
        Object res = null;
        System.out.println("工作之前打卡");
        //执行目标类的方法,通过Method类实现
        res = method.invoke(target,args);
        System.out.println("工作之后打卡");
        return res;
    }
}

四、动态代理

public class Main {
    public static void main(String[] args) {
        //创建需要代理的对象
        EmployeService target = new EmployeServiceImpl();
        //创建InvocationHandler对象
        InvocationHandler handler = new MyInvocationHandler(target);
        //使用Proxy创建代理
        EmployeService proxy = (EmployeService) Proxy.newProxyInstance(
                target.getClass().getClassLoader(),
                target.getClass().getInterfaces(),handler);
        //通过代理执行方法,会调用handler中的invoke()
        proxy.work();
    }
}

五、输出结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值