• 20160126--springaop


    package com.hanqi;
    
    public interface IJiSuanQi {
        
        public int jia(int a , int b);
        public int jian(int a , int b);
        public int cheng(int a, int b);
        public int chu(int a, int b);
        
    
    }
    IJiSuanQi
    package com.hanqi;
    
    public class MyJSQ implements IJiSuanQi {
    
        @Override
        public int jia(int a, int b) {
            // 记录日志
    //        System.out.println("加法调用前");
            return a + b;
        }
    
        @Override
        public int jian(int a, int b) {
            // 记录日志
    //        System.out.println("减法调用前");
            return a - b;
        }
    
        @Override
        public int cheng(int a, int b) {
            // 记录日志
    //        System.out.println("乘法调用前");
            return a * b;
        }
    
        @Override
        public int chu(int a, int b) {
            // 记录日志
    //        System.out.println("除法调用前");
            return a / b;
        }
    
    }
    MyJSQ
    package com.hanqi;
    
    public class Main {
    
        public static void main(String[] args) {
            
            IJiSuanQi jsq = new MyJSQ();
            
            //生成代理
            LoggingProxy lo = new LoggingProxy(jsq);
            
            jsq = lo.getProxy();
            
            System.out.println("加法 = " + jsq.jia(100, 200));
            System.out.println("减法 = " + jsq.jian(100, 200));
            System.out.println("乘法 = " + jsq.cheng(100, 200));
            System.out.println("除法 = " + jsq.chu(100, 20));
    
        }
    
    }
    Main
    package com.hanqi;
    
    import java.lang.reflect.*;
    
    /*
     *   代理类
     */
    public class LoggingProxy {
        
        
        public LoggingProxy(IJiSuanQi target) {
            super();
            this.target = target;
        }
    
        //要代理的对象,目标对象
        private IJiSuanQi target;
        
        //应用通知,并产生代理对象
        public IJiSuanQi getProxy()
        {
            IJiSuanQi rtn = null;
            
            //应用通知
    //        ClassLoader        //类加载器
            ClassLoader cl = target.getClass().getClassLoader();
            
            Class[] al = new Class[] {IJiSuanQi.class};
            
            InvocationHandler ih = new InvocationHandler() {
                
                /*
                 * proxy: 代理对象,一般不使用该对象  
                 *  method:正在被调用的方法
                 *  args: 调用方法传入的参数
                 */
                
                @Override
                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                    
                    // 加通知  日志
                    System.out.println(method.getName() + "开始调用");
                    
                    //反射调用
                    Object obj = method.invoke(target, args);
                    
                    // 加通知  日志
                    System.out.println(method.getName() + "结束调用");
                    
                    return obj;
                }
            };
            
            //产生代理对象
            /**
             * loader: 代理对象使用的类加载器
             * interfaces:指定代理对象的类型,即代理对象中可以有哪些方法
             * h: 当具体调节代理对象的方法时,应该如何进行响应,实际上就是调用  InvocationHandler  的    Invocation
             */
            rtn = (IJiSuanQi)Proxy.newProxyInstance(cl, al, ih);
            
            return rtn;
            
        }
        
    
    }
    LoggingProxy

  • 相关阅读:
    python读取配置文件
    日志截取
    QJsonObject
    OpenStack
    生成器迭代器正则视频笔记
    使用Qt.createComponent 动态加载组件
    linux 远程执行命令
    Django 建立工程连接数据库
    arm基础1
    QSetting的用法
  • 原文地址:https://www.cnblogs.com/name-hanlin/p/5161568.html
Copyright © 2020-2023  润新知