zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Oracle 实现数据表插入时主键列自增
    Java BigDecimal 加减乘除用法
    php最常见最经典的算法题(1)
    2、php-选择排序方法
    1、php-冒泡排序方法
    65G-一系列Go语言课程Go基础知识高级Go项目战斗New Go语言和区块链开发实践课程
    css
    python基础
    SEO优化指南
    转载GXT之旅
  • 原文地址:https://www.cnblogs.com/name-hanlin/p/5161568.html
Copyright © 2011-2022 走看看