package part1.Client.proxy; import part1.Client.rpcClient.RpcClient; import part1.Client.rpcClient.impl.NettyRpcClient; import part1.common.Message.RpcRequest; import part1.common.Message.RpcResponse; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * @author wxx * @version 1.0 * @create 2024/2/6 16:49 */ public class ClientProxy implements InvocationHandler { //传入参数service接口的class对象,反射封装成一个request private RpcClient rpcClient; public ClientProxy(){ rpcClient=new NettyRpcClient(); } //jdk动态代理,每一次代理对象调用方法,都会经过此方法增强(反射获取request对象,socket发送到服务端) @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //构建request RpcRequest request=RpcRequest.builder() .interfaceName(method.getDeclaringClass().getName()) .methodName(method.getName()) .params(args).paramsType(method.getParameterTypes()).build(); //数据传输 RpcResponse response= rpcClient.sendRequest(request); return response.getData(); } public T getProxy(Class clazz){ Object o = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, this); return (T)o; } }