zoukankan      html  css  js  c++  java
  • 动态代理

    //动态代理
    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);
        }
    }
  • 相关阅读:
    GitHub指南
    团队管理之愿景
    软件开发中的思维僵化
    疯狂的 JAVA 后++
    Spring MVC ajax:post/get 的具体实现
    ReentrantLock的Condition使用问题
    Scala学习(一)
    Tomcat源码分析(一)
    LeetCode -- Word Break 动态规划,详细理解
    Javascript 闭包访问问题?
  • 原文地址:https://www.cnblogs.com/Anonymity-zhang/p/14487348.html
Copyright © 2011-2022 走看看