zoukankan      html  css  js  c++  java
  • spring学习--动态代理 实现 AOP切面编程

    1.Auth 接口 
    package com.springstudy.aop.proxy;
    
    public interface Auth {
    
        int add(int i,int j);
        int sub(int i,int j);
        int mul(int i,int j);
        int div(int i,int j);
        
    }
    2.AuthImpl 实现 
    package com.springstudy.aop.proxy;
    
    public class AuthImpl implements Auth {
    
        @Override
        public int add(int i, int j) {
            return i + j;
        }
    
        @Override
        public int div(int i, int j) {
            return i / j;
        }
    
        @Override
        public int mul(int i, int j) {
            return i * j;
        }
    
        @Override
        public int sub(int i, int j) {
            return i - j;
        }
    
        
        
    }
    3.AuthLoggingProxy 代理类(动态代理核心代码)
    package com.springstudy.aop.proxy;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    import java.util.Arrays;
    
    public class AuthLoggingProxy {
    
        private Auth target;
        
        public AuthLoggingProxy(Auth target){
            this.target = target;
        }
        
        public Auth getLoggingProxy(){
            Auth proxy = null;
            
            //代理对象由那个类加载器负责加载
            ClassLoader loader = target.getClass().getClassLoader();
            //代理对象的类型,即代理对象中有哪些方法
            Class[] interfaces = new Class[]{Auth.class};
            //当调用代理对象的方法时执行一下方法中的内容
            InvocationHandler h = new InvocationHandler(){
                /*
                 * (non-Javadoc)
                 * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
                 * proxy 正在被代理的对象,一般不在invoke方法中调用(会死循环)
                 * method 正在被调用的方法
                 * args 入参
                 */
                @Override
                public Object invoke(Object proxy, Method method, Object[] args)
                        throws Throwable {
                    String methodname =  method.getName();
                    //日志
                    System.out.println("The method " + methodname + "begins with " + Arrays.asList(args));
                    //方法调用
                    Object result = method.invoke(target, args);
                    //日志
                    System.out.println("The method " + methodname + "ends with " + result);
                    return result;
                }
                
            };
            proxy = (Auth) Proxy.newProxyInstance(loader, interfaces, h);
            return proxy;
        }
        
    }
    4.Main 主类(测试用) 
    package com.springstudy.aop.proxy;
    
    /*
     * 动态代理    实现    AOP切面编程
     */
    public class Main {
    
        public static void main(String[] args){
    
    //        AuthImpl ai = new AuthImpl();
    //        int result = ai.add(1, 2);
    //        System.out.println(result);
    //         result = ai.div(4, 2);
    //        System.out.println(result);
            AuthImpl target = new AuthImpl();
            Auth proxy = (Auth) new AuthLoggingProxy(target).getLoggingProxy();
            
            int result = proxy.add(1, 2);
            System.out.println(result);
             result = proxy.div(4, 2);
            System.out.println(result);
        }
        
    }

    暂存代码,之后再做总结

    package com.springstudy.aop.proxy;
    public class AuthImpl implements Auth {
    @Overridepublic int add(int i, int j) {return i + j;}
    @Overridepublic int div(int i, int j) {return i / j;}
    @Overridepublic int mul(int i, int j) {return i * j;}
    @Overridepublic int sub(int i, int j) {return i - j;}
    }

  • 相关阅读:
    【实战】Weblogic xmldecoder反序列化Getshell
    【实战】JBOSS反序列化Getshell
    【实战】Tomcat管理后台Getshell
    【Python】二进制转ASCII码小脚本
    【实战】sqlmap显示有注入却无法爆出库名
    【总结】APP客户端渗透测试
    【总结】Struts2系列漏洞POC小结
    【Python】端口扫描脚本
    2020中国高校计算机大赛 华为云大数据挑战赛--热身赛--爬取天气数据
    2020中国高校计算机大赛 华为云大数据挑战赛--热身赛--赛题分析、数据理解
  • 原文地址:https://www.cnblogs.com/yuntianblog/p/13404344.html
Copyright © 2011-2022 走看看