JDK的动态代理


public static Object createProxy(Object target) {//这个target是被代理对象
        return Proxy.newProxyInstance(ProxyTest.class.getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {

            //这里的proxy是newProxyInstance返回生成的代理对象,method表示代理对象目前正在调用的方法
            //agrs表示代理类调用的方法包含的参数
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                if ("sayHello".equals(method.getName())) {
                    doBefore();
                    try {
                        method.invoke(target, args);
                    } catch (Exception e) {
                        doThrowing();
                    }
                    doAfter();
                }
                return null;
            }
        });
    }
JDK动态代理就是通过Proxy.newProxyInstance来创建代理对象的:
  • 第一个参数是ClassLoader:因为此次代理会创建一个接口的实现类,需要将这个类加载到jvm中,所以用到了ClassLoader。 (你要在哪个类里面生成代理对象就传哪个类的ClassLoader)

  • 第二个参数是代理类要实现的所有接口:当你调用这些接口的方法时都会进行拦截。

  • 第三个参数是InvocationHandler,每次调用代理对象的方法时,都会先执行InvocationHandler的invoke方法,在该方法中实现我们的拦截逻辑。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • title: Jdk动态代理原理解析 tags:代理 categories:笔记 date: 2017-06-14...
    行径行阅读 19,317评论 3 36
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,351评论 11 349
  • 原文: Dyanmic Proxy Classes 介绍 一个动态代理类是实现了多个接口存在于运行时的类,这样,一...
    半黑月缺阅读 956评论 0 0
  • 爱奇艺和优酷上有很多不需要会员就可以看的高质量电影。今天我来给大家介绍10部,排名不分先后,都是优酷和爱奇艺可以免...
    雪牙阅读 33,678评论 0 0
  • 最近在网上看到一篇写给未来孩子的信, 觉得特别的深刻, 就想着分享给你们读一读, 不管是送给自己, 还是送给未来的...
    stella梦想家阅读 247评论 0 1