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;
    }
    }

  • 相关阅读:
    在游戏中充分利用可编程的GPU
    坐标变换
    深入理解GPU Architecture(上)
    RV870和GT300的一些猜测
    深入理解Intel Core Microarchitecture
    CGDC见闻
    hdu 1517 K(2~9)倍博弈
    hdu 2177 威佐夫博弈+输出使你胜的你第1次取石子后剩下的两堆石子的数量
    坚持住
    真正体会到一个ac的快感
  • 原文地址:https://www.cnblogs.com/huaobin/p/14908438.html
Copyright © 2011-2022 走看看