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
    
        }
    }
  • 相关阅读:
    mui 单页面下拉刷新
    phpStorm格式化代码快捷键
    mui 子页面切换父页面底部导航
    Java连接Mysql的基本用法
    string替换所有指定字符串(C++)
    MySql与Java的时间类型
    MYSQL中防止插入重复记录的解决方案(无重复值更新)
    Java数据库连接池封装与用法
    Java中数据库连接池原理机制的详细讲解(转)
    Fedora14使用yum安装mysql
  • 原文地址:https://www.cnblogs.com/Kevin-1992/p/12608414.html
Copyright © 2011-2022 走看看