Java反射5.JDK动态代理
发布日期:2021-04-30 21:12:26 浏览次数:74 分类:精选文章

本文共 3142 字,大约阅读时间需要 10 分钟。

????????

??????

???????????????????????????????????????????????????????????????????????

?????????

?Java??java.lang.reflect????Proxy??InvocationHandler???????????????????????????????????????????????

?????????

Proxy?

Proxy???newProxyInstance???????????????????????

  • ClassLoader?????????????????????
  • Interface????????????????????????
  • InvocationHandler?????????????????????
  • InvocationHandler??

    InvocationHandler????invoke????????????????????????????invoke????????????????????????????

    ?????????

  • ???????????Proxy.newProxyInstance?????????
  • ??????????????????????
  • ?????????????????????????????InvocationHandler????
  • ?????????

    ???????

    ???????????????

    • ????????????????
    • ????????????????
    • ?????????????????????

    ???????????

    UserDao??

    package cn.itcast_06;
    public interface UserDao {
    public abstract void add();
    public abstract void delete();
    public abstract void update();
    public abstract void find();
    }

    UserDaoImpl???

    package cn.itcast_06;
    public class UserDaoImpl implements UserDao {
    @Override
    public void add() {
    System.out.println("????");
    }
    @Override
    public void delete() {
    System.out.println("????");
    }
    @Override
    public void update() {
    System.out.println("????");
    }
    @Override
    public void find() {
    System.out.println("????");
    }
    }

    MyInvocationHandler???

    package cn.itcast_06;
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    public class MyInvocationHandler implements InvocationHandler {
    private Object target;
    public MyInvocationHandler(Object target) {
    this.target = target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
    throws Throwable {
    System.out.println("????");
    Object result = method.invoke(target, args);
    System.out.println("????");
    return result;
    }
    }

    ??????????

    package cn.itcast_06;
    import java.lang.reflect.Proxy;
    public class Test {
    public static void main(String[] args) {
    UserDao ud = new UserDaoImpl();
    ud.add();
    ud.delete();
    ud.update();
    ud.find();
    System.out.println("-----------");
    // ????????
    MyInvocationHandler handler = new MyInvocationHandler(ud);
    UserDao proxy = (UserDao) Proxy.newProxyInstance(
    ud.getClass().getClassLoader(),
    ud.getClass().getInterfaces(),
    handler);
    proxy.add();
    proxy.delete();
    proxy.update();
    proxy.find();
    System.out.println("-----------");
    // ?????????????
    StudentDao sd = new StudentDaoImpl();
    MyInvocationHandler handler2 = new MyInvocationHandler(sd);
    StudentDao proxy2 = (StudentDao) Proxy.newProxyInstance(
    sd.getClass().getClassLoader(),
    sd.getClass().getInterfaces(),
    handler2);
    proxy2.login();
    proxy2.regist();
    }
    }

    ???????

  • ???????????????????
  • ?????????????????
  • ??????????????????????????
  • ??

    ??????????????????????????????????????????InvocationHandler?????????????????????????????????????????????????

    上一篇:移动开发工程师
    下一篇:dos运行java文件

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2026年06月08日 09时51分05秒