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

  • 相关阅读:
    软件工程网络15结对编程作业
    软件工程网络15个人阅读作业2-提出问题
    软件工程网络15个人阅读作业1
    陈敏 Java课设实验报告
    201521123099 《Java程序设计》第13周学习总结
    201521123027 <java程序设计>第十二周作业总结
    201521123099 《Java程序设计》第11周学习总结
    Java程序设计——学生信息系统
    201521123097《Java程序设计》第十一周学习总结
    201521123097《Java程序设计》第十周学习总结
  • 原文地址:https://www.cnblogs.com/huaobin/p/14908438.html
Copyright © 2011-2022 走看看