• 动态代理


    在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();
        }
    
    }
    竹杖芒鞋轻胜马,一蓑烟雨任平生。 回首向来萧瑟处,也无风雨也无晴。
  • 相关阅读:
    spring源码学习之【准备】cglib动态代理例子
    spring源码学习之【准备】jdk动态代理例子
    eclipse使用jetty插件出现内存溢出解决方案
    SpringMVC Controller 返回值的可选类型
    spring之bean的作用域scope的值的详解
    SVN与Git的区别
    java thread yield 的设计目的是什么?
    JAVA Set 交集,差集,并集
    Executor, ExecutorService 和 Executors 间的区别与联系
    java.util.concurrent.Executors类的常用方法介绍
  • 原文地址:https://www.cnblogs.com/yaobiluo/p/11360621.html
Copyright © 2020-2023  润新知