zoukankan      html  css  js  c++  java
  • Java Proxy 代理学习

    1.我说理解的代替

      

    用图说话 直接上代码

    public class Facade implements InvocationHandler{
    
        private Object obj = null;
        
        private static Facade facade = null;
        
        
        private static Facade getInstence(){
            if(facade == null){
                facade = new Facade();
            }
            return facade;
        } 
        
        public static Object get(Object obj){
            getInstence().obj  = obj;
            /**
             * 说明:这里可以看做返回一个代理对象 
             * 这个方法的作用:1.载入Interface的Class里面会自动在JVM里面找到这个Interface的实现
             *                   2.载入一个 InvocationHandler 这个Hander所做的事情就是在方法调用之前 之后干你想做的事
             *                   3.真正返回的是接口实现的对象
             */
            return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), getInstence());
        }
        
        /**
         * 重写代理调用
         */
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable {
            System.out.println("Before Method Exec");
            Object result = method.invoke(obj, args);
            System.out.println("After Method Exec");
            return result;
        }
    
    }

    接口 必须实现

    /**
     * 
     * @author yunyang
     *
     */
    public interface IProxyInterface {
        
        public void add();
        
        public void delete();
    }

    接口实现

    public class ProxyImpl implements IProxyInterface {
    
        @Override
        public void add() {
            // TODO Auto-generated method stub
            System.out.println("Add Method Exec");
            
        }
    
        @Override
        public void delete() {
            // TODO Auto-generated method stub
            System.out.println("Delete Method Exec");
        }
    
    }

    测试代码

    public class Test {
        public static void main(String[] args) throws ClassNotFoundException,Exception {
            IProxyInterface impl = (IProxyInterface)Facade.get(new ProxyImpl());
            
            //这里看做是代理对象调用的方法 只是和原有对象方法一样那样就好理解了
            impl.add();
            impl.delete();
        }
    }

    这样的好处 把接口以及实现写到接口文件里面 那样可以降低耦合 facade 思想

  • 相关阅读:
    Shiro笔记(三)shiroFilter拦截器配置原则
    Shiro笔记(二)Shiro集成SpringMVC的环境配置
    Shiro笔记(一)Shiro整体介绍
    javaNIO的总结
    Redis的工作流程
    Nginx的配置安装和使用
    Linux下java开发环境配置总结
    php 基础知识 post 和get 两种传输方式的区别
    php 高级 多台web服务器共享session的方法
    php 基础知识 SESSION 和 COOKIE 的区别
  • 原文地址:https://www.cnblogs.com/yy199110/p/3080246.html
Copyright © 2011-2022 走看看