43 lines
1.4 KiB
Java
43 lines
1.4 KiB
Java
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>T getProxy(Class<T> clazz){
|
||
Object o = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, this);
|
||
return (T)o;
|
||
}
|
||
}
|