前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动态代理详解

动态代理详解

作者头像
黑泽君
发布2018-10-11 10:45:20
2480
发布2018-10-11 10:45:20
举报
文章被收录于专栏:黑泽君的专栏黑泽君的专栏

动态代理详解

动态代理它可以直接给某一个目标对象生成一个代理对象,而不需要代理类存在。     动态代理与代理模式原理是一样的,只是它没有具体的代理类,直接通过反射生成了一个代理对象。     动态代理生成技术:         1. 基于jdk提供一个Proxy类,可以直接给实现某接口的实现类直接生成代理对象。         2. 基于cglib (spring框架会学习)

    java.lang.reflect.Proxy;   该类可以直接生成一个代理对象。

Proxy类的方法:         public static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) 返回一个指定接口的代理类实例。             仅能代理实现至少一个接口的类(即目标对象需要至少有一个接口)。             ClassLoader:类加载器。固定写法,和被代理类使用相同的类加载器即可。             Class[]:代理类要实现的接口。固定写法,和被代理类使用相同的接口即可。             InvocationHandler:策略(方案)设计模式的应用。如何去具体实现代理,由我们自己决定。

InvocationHandler接口中的invoke方法:调用代理类的任何方法,此方法都会执行。         Object invoke(Object proxy, Method method, Object[] args)             Object proxy:代理对象本身的引用。一般用不着。             Method method:当前调用的方法。             Object[] args:当前方法用到的参数。

动态代理的应用:         在动态代理技术里,由于不管用户调用代理对象的什么方法,都是调用开发人员编写的处理器的invoke方法(这相当于invoke方法拦截到了被代理对象的方法调用)。         并且,开发人员通过invoke方法的参数,还可以在拦截的同时,知道用户调用的是什么方法,因此利用这两个特性,就可以实现一些特殊需求,

        例如:拦截用户的访问请求,以检查用户是否有访问权限动态地为目的对象添加额外的功能

    静态/动态代理图解:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 动态代理详解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档