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

    jdk动态代理:

    • jdk动态代理是 需要提供一个实现了InvocationHandler接口的处理类;

    • 通过Proxy的newProxyInstance()方法,参数有三个,第一个是
      类构造器classloader,第二个是目标类实现的接口,这是必须的;第三个就是上面自定义的处理类Handler;

    局限是必须是目标类实现了接口,否则无法用java提供的动态代理,但是CGlib进行了补充,通过实现目标类的子类来进行代理。

    大家在熟悉不过的便是AOP了,spring中AOP便是通过 java 动态代理 和 CGlib两种方式实现的。

    通过以下例子来简单认识jdk动态代理:

    public interface Bank {
        public void save();
    }
    public class ICBCBank implements Bank {
        @Override
        public void save() {
            System.out.println("工商存钱");
        }
    
    }
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    
    public class MyHandler implements InvocationHandler{
    
        private Object target;
    
        MyHandler(Object target){
            this.target = target;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            before();
            Object obj = method.invoke(target, args);
            after();
            return obj;
        }
    
        private void before(){
            System.out.println("检查钱是否完整无存");
        }
    
        private void after(){
            System.out.println("如果有错,就回滚");
        }
    }
    
    import java.lang.reflect.Proxy;
    
    public class ProxyDemo {
        public static void main(String[] args) {
            Bank bank =  new ICBCBank();
            MyHandler handler = new MyHandler(bank);
    
            Bank obj =  (Bank) Proxy.newProxyInstance(bank.getClass().getClassLoader(), 
                    bank.getClass().getInterfaces(), 
                    handler);
            obj.save();
            //System.out.println(obj.getClass().getName());//com.sun.proxy.$Proxy0
    
        }
    }
  • 相关阅读:
    【转】 Linux Core Dump 介绍
    【转】 设定linux 系统可用资源
    Python for 循环 失效
    transition 平移属性实现 横向整屏 滚动
    vue 插槽的使用
    vue pc商城仿网易严选商品的分类效果
    干货-vue 中使用 rxjs 进行非父子组件中传值
    vue 2.0 脚手架项目中使用 cross-env 分环境打包
    什么是闭包,有哪些优缺点呢?
    滚动视差
  • 原文地址:https://www.cnblogs.com/Kevin-1992/p/12608414.html
Copyright © 2011-2022 走看看