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

    package com.java.exec2;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    import java.util.Objects;
    
    /**
     * Created by zhangyanana    on 2017/3/16.
     */
    //动态代理的使用
    interface Subject {
        void action();
    }
    
    //被代理类
    class RealSubject implements Subject {
    
        @Override
        public void action() {
            System.out.println("我是被代理类,真正执行的是我");
        }
    }
    //代理类
    class MyInvocationHandler implements InvocationHandler {
        Object obj;//实现了接口的被代理类的对象的声明
    
        //1.给被代理类的对象实例化
        //2.返回一个代理类的对象
        public Object blind(Object obj) {//传入被代理类的对象
            this.obj = obj;
            return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
        }
        //当通过代理类的对象发起对被重写的方法的调用时,都会转换为对如下的invoke方法的调用
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            Object invoke = method.invoke(obj, args);
            return invoke;
        }
    }
    
    public class TestProxy {
        public static void main(String[] args) {
            //1.被代理类对象
            RealSubject real = new RealSubject();
            //2.创建一个实现了InvocationHandler接口的类的对象
            MyInvocationHandler handler =new MyInvocationHandler();
            //3.调用blind()方法。动态的返回一个同样实现了real所在类实现的接口Subject的代理类的对象
            Object obj = handler.blind(real);
            Subject sub = (Subject)obj;//此时的sub就是代理类的对象
    
            sub.action();//转到对invoke()方法的调用
    
            //另一个例子
            NikeClothFactory nike = new NikeClothFactory();
            ClothFactory proxyCloth = (ClothFactory) handler.blind(nike);//proxyCloth即为代理类的对象
            proxyCloth.productCloth();
    
        }
    }
  • 相关阅读:
    (转)extern用法详解
    (转)extern用法,全局变量与头文件
    关于将数字转换成中文表达程序
    不用对战平台玩魔兽
    结构体内存对齐问题(转)
    今天碰到的很奇怪的问题
    99乘法表
    自我检讨
    收支簿
    掠夺论
  • 原文地址:https://www.cnblogs.com/zhyn-BeHard/p/6559713.html
Copyright © 2011-2022 走看看