• 动态代理


    //动态代理
    public class ProxyTest2 {
        public static void main(String[] args) {
            SuperMan superMan = new SuperMan();
            Human proxyInstance = (Human) ProxyFactory.getProxyInstance(superMan);
            System.out.println(proxyInstance.dream());
            proxyInstance.est("菠萝");
        }
    }
    
    //接口
    interface Human{
        String dream();
        void est(String food);
    }
    
    //被代理类
    class SuperMan implements Human{
        @Override
        public String dream() {
            return "my dream is fly";
        }
        @Override
        public void est(String food) {
            System.out.println("I like to eat "+food);
        }
    }
    
    //代理类工厂
    class ProxyFactory {
        public static Object getProxyInstance(Object object) { //obj : 被代理类的对象
         //通过Proxy 创建一个代理类
            /*
            三个参数:
             loader :被代理类的加载器
             interface : 代理类实现的接口
              invocationHandler : 动态的调用被代理类的方法
             */
            MyInvocationHandler myInvocationHandler = new MyInvocationHandler();
            myInvocationHandler.bind(object);
           return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),myInvocationHandler);
        }
    }
    //invocationHandler的实现类
    class MyInvocationHandler implements InvocationHandler{
        private Object object; //需要使用被代理类的对象赋值
        public void bind(Object object){
            this.object=object;
        }
        //当通过代理类调用方法时 , 就会通过invoke()方法调用被代理类的方法
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            return method.invoke(object,args);
        }
    }
  • 相关阅读:
    智慧园区数字孪生平台GIS+三维可视化的研究
    树莓派联通家庭宽带端口映射
    NetCore 5.0 Dokcer中发布报NU3028、NU3037
    django导入导出excel实践
    MySQL JSON类型
    业务、设计模式、算法
    VIM 简单教程
    k8s go-client 使用简介
    如何健壮你的后端服务
    公共dto打包时按条件导出实现feignclient接口的bean,解决feign.Feign$Builder类找不到的问题
  • 原文地址:https://www.cnblogs.com/Anonymity-zhang/p/14487348.html
Copyright © 2020-2023  润新知