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
    
        }
    }
  • 相关阅读:
    caffe BUG
    Ubuntu安装低版本gcc
    OpenCV的CV :: findHomography运行时错误
    opencv中使用 SURF算法匹配的遇到的问题
    C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法 --转
    SIFI与surf
    opencv复习
    opencv老版本的IplImage使用
    python学习笔记-对象持久化保存与恢复
    Styles and Themes
  • 原文地址:https://www.cnblogs.com/Kevin-1992/p/12608414.html
Copyright © 2011-2022 走看看