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

    先贴代码 ,有空再写说明

    package com.pattern.structure.proxy;
    
    /**
     * 信息接口
     */
    public interface Message {
    
        public void sendMessage(String value);
    
    }
    package com.pattern.structure.proxy;
    /**
     * 邮箱实现类
     */
    public class EmailMessage implements Message {
    
        @Override
        public void sendMessage(String value) {
            System.out.println(value);
        }
    
    }
    package com.pattern.structure.proxy;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy; 
    
    /**
     * 动态代理
     */
    public class DynamicProxy implements InvocationHandler {
    
        private Object target;
    
        /**
         * 绑定委托对象并返回一个代理类
         * @param target
         * @return
         */
        public Object bind(Object target) {
            this.target = target;
            // 取得代理对象 ,要绑定接口(这是一个缺陷,cglib弥补了这一缺陷)
            return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(), this);
        }
    
        @Override
        public Object invoke(Object obj, Method method, Object[] aobj)
                throws Throwable {        
            Object result = null;
            if(checkSendMessage(aobj[0])){
                result = method.invoke(target, aobj);
            }else{
                System.out.println("发送的短信为空,发不出去");
            }        
            return result;
        }    
    
        public boolean checkSendMessage(Object value){
            return value == null ? false : true;
        }
    
    }
    package com.pattern.structure.proxy;
    
    public class Test {
    
        /**
         * @param args
         */
        public static void main(String[] args) {        
            /**************动态代理******************/
            DynamicProxy dynamicProxy =  new DynamicProxy();
            Message emailMessageProxy = (Message)dynamicProxy.bind(new EmailMessage());
            emailMessageProxy.sendMessage(null);
            emailMessageProxy.sendMessage("动态代理成功发送");
        }
    
    }
  • 相关阅读:
    分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解
    java 对小数位的处理 BigDecimal DecimalFormat 常用操作 浅解
    事务 锁 悲观锁 乐观锁 概念 应用场景 使用方式 小记
    多项目使用同一个zookeeper,遇到的坑
    java线程关键字之volatile
    数据库事务
    Web.xml配置详解之context-param
    WINDOWS上KAFKA运行环境安装
    hibernate 之session学习
    windows 安装hadoop
  • 原文地址:https://www.cnblogs.com/evilrogue/p/2881593.html
Copyright © 2011-2022 走看看