新增依赖和远程调用工具类

This commit is contained in:
wanggeng 2021-09-18 20:28:36 +08:00
parent 9a2cb4bad3
commit 8f23bca7e2
4 changed files with 116 additions and 0 deletions

View File

@ -152,6 +152,13 @@
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- wgink end -->
<!-- cglib start -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
</dependency>
<!-- cglib end -->
</dependencies>
</project>

View File

@ -0,0 +1,45 @@
package ink.wgink.util.remote.rest;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
/**
* @ClassName: RestRemoteRequest
* @Description: rest远程请求
* @Author: wanggeng
* @Date: 2021/9/18 4:23 下午
* @Version: 1.0
*/
public class RestRemoteRequestDemo implements MethodInterceptor {
@Override
public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
return methodProxy.invokeSuper(o, args);
}
public static class RestRemoteRequestFactory {
public static Object getProxy(Class<?> clazz) {
Enhancer enhancer = new Enhancer();
enhancer.setClassLoader(clazz.getClassLoader());
enhancer.setSuperclass(clazz);
enhancer.setCallback(new RestRemoteRequestDemo());
return enhancer.create();
}
}
public static class Demo {
void say(String msg) {
System.out.println(msg);
}
}
public static void main(String[] args) {
Demo demo = (Demo) RestRemoteRequestFactory.getProxy(Demo.class);
demo.say("你好");
}
}

View File

@ -0,0 +1,26 @@
package ink.wgink.util.remote.rest.handler;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* @ClassName: RestRemoterHandler
* @Description: Rest远程调用
* @Author: wanggeng
* @Date: 2021/9/18 5:14 下午
* @Version: 1.0
*/
public class RestRemoteHandler implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method.getDeclaringClass().getClassLoader());
// 否则执行统一接口处理方法
return method.invoke(this, args);
}
public Object run() {
return "run";
}
}

View File

@ -0,0 +1,38 @@
package ink.wgink.util.remote.rest.proxy;
import ink.wgink.util.remote.rest.handler.RestRemoteHandler;
import java.lang.reflect.Proxy;
/**
* @ClassName: RestRemoteProxy
* @Description: Rest远程调用代理
* @Author: wanggeng
* @Date: 2021/9/18 5:40 下午
* @Version: 1.0
*/
public class RestRemoteProxy {
public static <T> T getInstance(Class<T> cls) {
RestRemoteHandler restRemoteHandler = new RestRemoteHandler();
Object o = Proxy.newProxyInstance(cls.getClassLoader(), new Class[]{cls}, restRemoteHandler);
return (T) o;
}
public interface IDemo {
String say();
}
public static class DemoImpl implements IDemo {
@Override
public String say() {
return "go";
}
}
public static void main(String[] args) {
IDemo demo = RestRemoteProxy.getInstance(IDemo.class);
System.out.println(demo.say());
}
}