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

    在java中   java.lang.reflect包下提供了一个proxy类  和  一个  InvocationHandle接口

        InvocationHandle 接口  的作用是生成动态代理对象    JDK 提供的代理只能针对接口做代理

        proxy 中有一个方法    newProxyInstance()   :

               这个方法有三个参数:      类加载器     接口    InvocationHandle对象

    public interface User {
        public void add();
        public void delete();
    }
    public class UserImp implements User {
    
        @Override
        public void add() {
            System.out.println("添加功能");
        }
    
        @Override
        public void delete() {
            System.out.println("删除功能");
        }
    
    }
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    
    public class MyInvocationHandler implements InvocationHandler {
        private Object target;
        
        public MyInvocationHandler(Object target) {
            this.target = target;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("账号校验");      //  代理的方法
            method.invoke(target, args);     //  调用方法
            System.out.println("日志记录");    //  代理的方法
            return null;
        }
    
    }
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Proxy;
    
    public class Test {
    
        public static void main(String[] args) {
            UserImp ui = new UserImp();
            ui.add();
            ui.delete();
            System.out.println("--------------");
            MyInvocationHandler mh = new MyInvocationHandler(ui);         //  生成动态代理对象
            User u = (User)Proxy.newProxyInstance
                    (ui.getClass().getClassLoader(), ui.getClass().getInterfaces(), mh);   //  三个参数      累加载器,接口,动态代理对象
            u.add();           //方法执行前后就动态执行   动态代理的方法        
            u.delete();
        }
    
    }
    竹杖芒鞋轻胜马,一蓑烟雨任平生。 回首向来萧瑟处,也无风雨也无晴。
  • 相关阅读:
    markDown 语法学习
    flutter 自定义输入框组件
    flutter 学习零碎知识点01
    如何让模拟的json数据接口能够正常的在手机上有效果
    react高阶组件的使用
    如何把原生小程序项目合并的mpvue项目中
    如何把一个vue组件改为ionic/angular组件
    浅析MySQL中change与modify的区别
    如何在电脑上配置两个tomcat
    警告-SetPropertiesRule Server Service Engine Host Context
  • 原文地址:https://www.cnblogs.com/yaobiluo/p/11360621.html
Copyright © 2011-2022 走看看