flink1.19源码学习-动态代理(1)

本文介绍了Java动态代理在Flink1.19源码中的应用,展示了如何通过动态代理实现代理类并增强方法,重点讲解了与RPC的结合,预示了后续将深入研究Flink的RPC机制。
摘要由CSDN通过智能技术生成

flink1.19源码学习-动态代理

这一节很简单,但是很重要。

由于flink源码中大量用到了动态代理,所以第一节还是先把基本知识交代清楚,方便我们接下来的学习。

Java 动态代理是一种用于创建动态代理类和代理对象的方法,它可以在运行时动态地对方法进行增强。

实现

通过一个简单的例子,迅速掌握动态代理

ResourceManagerGateway

public interface ResourceManagerGateway {
    /**
     * 定义一个注册方法
     */
    void registerTaskExecutor();
}

ResourceManager

public class ResourceManager implements ResourceManagerGateway{
    @Override
    public void registerTaskExecutor() {
        System.out.println("注册registerTaskExecutor");
    }
}


PekkoInvocationHandler

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class PekkoInvocationHandler implements InvocationHandler {

    private Object target;

    public PekkoInvocationHandler(Object target) {
        this.target = target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {


        return invokeRpc(method,args);
    }

    private Object invokeRpc(Method method, Object[] args) throws InvocationTargetException, IllegalAccessException {
        System.out.println("调用pekko ask方法向ResourceManager发送调用的方法");
        Object res = method.invoke(target, args);
        System.out.println("结束调用");
        return res;
    }
}


Demo

import java.lang.reflect.Proxy;

public class Demo {

    public static void main(String[] args) {
        /** 创建目标对象 */
        ResourceManager myObject = new ResourceManager();
        /** 创建InvocationHandler */
        PekkoInvocationHandler handler = new PekkoInvocationHandler(myObject);

        ResourceManagerGateway proxy = (ResourceManagerGateway) Proxy.newProxyInstance(
                ResourceManagerGateway.class.getClassLoader(),
                new Class[]{ResourceManagerGateway.class},
                handler);

        proxy.registerTaskExecutor();
    }
}


运行结果

调用pekko ask方法向ResourceManager发送调用的方法
注册registerTaskExecutor
结束调用

总结

在接下来的源码阅读中,动态代理主要与RPC结合使用,对于像flink这种分布式架构来说,RPC是重中之重。所以接下来就学习flink的RPC。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值