美文网首页
4.利用JDK提供的动态代理来代理接口

4.利用JDK提供的动态代理来代理接口

作者: 小竹猫 | 来源:发表于2018-12-22 18:47 被阅读0次

    创建代理类

    //JDK 提供的动态代理 ,只能代理接口 ,不能代理类 。cglib 能代理类 。
    public class DynamicProxy implements InvocationHandler{
    
        //声明一个对象 ,这个对象 就是用来表示 被代理类 。
        private Object obj;
        //传入被代理对象 。
        public Object getProxy(Object obj){
            this.obj = obj;
            //生成代理对象 。
            return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
        }
        
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            // TODO Auto-generated method stub
            check();
            beforeLogging();
            Object returnValue = method.invoke(obj, args);
            afterLoggging();
            return returnValue;
        }
    
        public void beforeLogging(){
            System.out.println("事前日志 。");
        }
        public void afterLoggging(){
            System.out.println("事后日志。");
        }
        public void check(){
            System.out.println("安全检查。");
        }
        
    }
    

    obj.getClass().getClassLoader():拿到对象所有的加载器
    obj.getClass().getInterfaces():拿到对象所有的构造器

    定义两个接口,并为其创建实体类

    public class PanMeiNv implements MeiNv {
    
        @Override
        public void play() {
            // TODO Auto-generated method stub
            System.out.println("和潘美女玩 。。。");
        }
    
    }
    
    @Override
        public void mai() {
            // TODO Auto-generated method stub
            System.out.println("上海的房子要卖。2亿。");
        }
    

    定义一个主方法

    public static void main(String[] args) {
            //创建被代理对象
            //PanMeiNv pan = new PanMeiNv();
            //创建代理类.
            /*DynamicProxy dp = new DynamicProxy();
             *通过getProxy方法拿到代理对象.
             *object proxy = dp.getProxy(pan);
             *把代理对象强转成美女类型.
             *MeiNv mv = (MeiNv)proxy;
             *mv.play();
             * 
             * */
            
            //流程痕迹
            
            //创建被代理对象
            ShangHaiFang sh = new ShangHaiFang();
            DynamicProxy dp = new DynamicProxy();
            Object proxy = dp.getProxy(sh);
            Fang f = (Fang) proxy;
            f.mai();
        }
    }
    

    输出结果:

    安全检查。
    事前日志 。
    上海的房子要卖。2亿。
    事后日志。
    

    相关文章

      网友评论

          本文标题:4.利用JDK提供的动态代理来代理接口

          本文链接:https://www.haomeiwen.com/subject/ncqvkqtx.html