zoukankan      html  css  js  c++  java
  • 一个接口代理demo

    说明: 自定义一个接口,动态生成代理类并执行

    核心代码为 java提供

    Proxy

    的api:

    public static Object newProxyInstance(ClassLoader loader,
                                          Class<?>[] interfaces,
                                          InvocationHandler h)

    核心代码:

    import com.ahd.feign.intef.UserInte;
    import java.lang.reflect.Proxy;
    
    public class ProxyTest {
        public static void main(String[] args) {
            System.out.println(UserInte.class.isInterface());//isInterface 判断是否是接口,UserInte即自定义的接口
    
            Object o = Proxy.newProxyInstance(UserInte.class.getClassLoader()//自定义接口 UserInte 的类加载器
                    , new Class[]{UserInte.class}//自定义接口的class对象
                    , new MyInvocationHandler());//自定义的实现 InvocationHandler的调用处理类
            
            UserInte userInte = (UserInte)o;
            
            userInte.test(); //自定义接口用来测试的方法
        }
    }

    自定义接口 UserInte 代码(被代理的接口):

    public interface UserInte {
    
        public void test();
    
    }
    自定义InvocationHandler类,重写 invoke方法
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    public class MyInvocationHandler implements InvocationHandler {
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            Object invoke = null;
    
            //如果传进来的是一个接口(核心)
            if (method.getDeclaringClass().isInterface()) {
                try {
                    //可以做一系列代理操作
                    //如调用方法
                    //如远程http操作
                    //这里测试只打印一句话
                    System.out.println("接口调用成功");
                } catch (Throwable t) {
                    t.printStackTrace();
                }
            //如果传进来是类
            } else {
                try {
                    invoke = method.invoke(this, args);
                } catch (Throwable t) {
                    t.printStackTrace();
                }
            }
            return invoke;
        }
    }
    效果:

  • 相关阅读:
    mongodb远程连接配置
    CentOs系统设置python版本
    python非官方模块下载大全
    Series.str——字符串批量处理方法
    gevent-协程用法
    与vnpy相关的有用博客网址
    vnpy官网说明文档网址
    Opencv各种编码器下视频文件大小对比
    Linux下python默认版本切换成替代版本
    CPU拓扑结构
  • 原文地址:https://www.cnblogs.com/aihuadung/p/14530006.html
Copyright © 2011-2022 走看看