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

    package com.at221;
    
    //代理设计模式:
    
    interface ClothFactory{
        void product();
    }
    
    class NikeFactory implements ClothFactory{//被代理类:
    
        @Override
        public void product() {
            System.out.println("Nike服装很可靠");
        }
        
    }
    
    class ProxyFactory implements ClothFactory{//代理类:
    
        private NikeFactory nf;
        
        public ProxyFactory(NikeFactory nf){
            this.nf = nf;
        }
        @Override
        public void product() {
            this.nf.product();
        }
        
    }
    
    public class TestProxy {
        public static void main(String[] args) {
            NikeFactory nf = new NikeFactory();
            ProxyFactory pf = new ProxyFactory(nf);
            pf.product();
        }
    }

    下面是利用反射机制进行实现的动态代理:

     
    package com.at221;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    interface Subject{
        void show();
    }
    
    class RealSubject implements Subject{
    
        @Override
        public void show() {
            System.out.println("zhaoning,i love you!!!");
        }
        
    }
    
    class ProxySubject implements InvocationHandler{
        Object obj;
        public Object blind(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 {
            Object returnVal = method.invoke(obj, args);
            return returnVal;
        }
    
    }
    
    public class TestProxy1{
        public static void main(String[] args) {
            RealSubject rs = new RealSubject();
            ProxySubject ps = new ProxySubject();
            Subject rss = (Subject)ps.blind(rs);
            rss.show();
        }
    }
  • 相关阅读:
    Asp.Net MVC3.0中防止跨站的POST
    .NET实现字符串base64编码
    silverlight调用MVC WebApi方法
    MVC实现上传图片的方法
    ASP.NET使用文件上传控件上传图片
    设置网页icon标志
    C# 连接EXCEL 和 ACCESS
    javascript前进、后退、刷新的实现
    DataTable数据统计方法
    常量指针和指针常量
  • 原文地址:https://www.cnblogs.com/zhaoningzyn/p/6835313.html
Copyright © 2011-2022 走看看