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();
        }
    }
  • 相关阅读:
    vmware克隆Centos6.4虚拟机网卡无法启动问题
    mysql错误:Statement violates GTID consistency
    /etc/vsftpd.conf详解
    Linux /etc/fstab文件
    sudo命令详解
    linux fack 文件系统修复命令
    ORA-01502: 索引或这类索引的分区处于不可用状态
    Oracle 完整性约束错误
    linux下部署redis
    Python 发送邮件案例
  • 原文地址:https://www.cnblogs.com/zhaoningzyn/p/6835313.html
Copyright © 2011-2022 走看看