zoukankan      html  css  js  c++  java
  • spring15

    AOP(JDK 动态代理)
    ​ 1)使用 JDK 动态代理,使用 Proxy 类里面的方法创建代理对象

    调用 newProxyInstance 方法,方法有三个参数:

    public static Object newProxyInstance(ClassLoader loader,
    Class<?>[] interfaces,
    InvocationHandler h)
    1
    2
    3
    ​ 第一参数,类加载器

    ​ 第二参数,增强方法所在的类,这个类实现的接口,支持多个接口

    ​ 第三参数,实现这个接口 InvocationHandler,创建代理对象,写增强的部分

    ​ 2)编写 JDK 动态代理代码

    //(1)创建接口,定义方法
    public interface UserDao {
    public int add(int a,int b);
    public String update(String id);
    }
    1
    2
    3
    4
    5
    //(2)创建接口实现类,实现方法
    public class UserDaoImpl implements UserDao {
    @Override
    public int add(int a, int b) {
    return a+b;
    }
    @Override
    public String update(String id) {
    return id;
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //(3)使用 Proxy 类创建接口代理对象
    public class JDKProxy {
    public static void main(String[] args) {
    //创建接口实现类代理对象
    Class[] interfaces = {UserDao.class};
    UserDaoImpl userDao = new UserDaoImpl();
    /** 第一参数,类加载器
    第二参数,增强方法所在的类,这个类实现的接口,(支持多个接口)
    第三参数,实现这个接口 InvocationHandler,创建代理对象,写增强的部分 */
    UserDao dao =(UserDao)Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces,
    new UserDaoProxy(userDao));
    int result = dao.add(1, 2);
    System.out.println("result:"+result);
    }
    }

    //创建代理对象代码
    class UserDaoProxy implements InvocationHandler {
    //1 把创建的是谁的代理对象,把谁传递过来
    //有参数构造传递
    private Object obj;
    public UserDaoProxy(Object obj) {
    this.obj = obj;
    }
    //增强的逻辑
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    //方法之前
    System.out.println("方法之前执行...."+method.getName()+" :传递的参数..."+ Arrays.toString(args));
    //被增强的方法执行
    Object res = method.invoke(obj, args);
    //方法之后
    System.out.println("方法之后执行...."+obj);
    return res;
    }
    }

  • 相关阅读:
    curl 的使用,参数大全
    ubuntu 编译安装php5扩展
    ubuntu 编译安装 php5.6.40
    ubuntu 编译安装 mysql5.7.32
    ubuntu 编译安装 apache2.4.46
    Android 逆向工具总结
    mariadb 和 mysql 之间的版本关系
    ubuntu 使用 apt 安装 apache2 php7 mysql8
    linux 系统安装 pip
    P2756 飞行员配对方案问题 提交 13.91k 通过 7.59k 时间限制 1.00s 内存限制 125.00MB 返回题目
  • 原文地址:https://www.cnblogs.com/huaobin/p/14908438.html
Copyright © 2011-2022 走看看