动态代理详解

动态代理详解

动态代理它可以直接给某一个目标对象生成一个代理对象,而不需要代理类存在。     动态代理与代理模式原理是一样的,只是它没有具体的代理类,直接通过反射生成了一个代理对象。     动态代理生成技术:         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方法的参数,还可以在拦截的同时,知道用户调用的是什么方法,因此利用这两个特性,就可以实现一些特殊需求,

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

    静态/动态代理图解:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • c语言基础学习08_内存管理

    ============================================================================= 涉及...

    黑泽君
  • 【java面试题001】Boolean b = new Boolean(“abcde”); 会编译报错吗?

      不会编译报错,在Boolean的构造函数中,除了”true”和”false”之外的字符串虽然不会造成编译错误,但是会返回false。

    黑泽君
  • 无法打开谷歌网上应用商店 --> 设置(齿轮) --> 我的扩展程序和应用 这个选项?该如何解决呢?

    无法打开 谷歌网上应用商店 --> 设置(齿轮) --> 我的扩展程序和应用 这个选项卡?该如何解决呢?操作如下图所示:

    黑泽君
  • java动态代理实现与原理详细分析

    关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理。

    java思维导图
  • 设计模式--Proxy模式

    Subject: 可以是接口,也可以是抽象类 Proxy: 内部含有对真实对象RealSubject的引用,负责对真实主题角色的调用,并在真实主题角色处理...

    河岸飞流
  • 所有和Java中代理有关的知识点都在这了。

    对于每一个Java开发来说,代理这个词或多或少都会听说过。你可能听到过的有代理模式、动态代理、反向代理等。那么,到底什么是代理,这么多代理又有什么区别呢。本文就...

    java思维导图
  • 动态代理那些事

    静态代理优点在于,业务类只需关注业务本身,保证了业务类的重用性,这也是代理模式共有的优点;

    蜻蜓队长
  • 手把手教你利用Pyecharts库对IP代理数据进行数据可视化分析

    前几天小编发布了手把手教你使用Python爬取西次代理数据(上篇)和手把手教你使用Python爬取西次代理数据(下篇),木有赶上车的小伙伴,可以戳进去看看。今天...

    Python进阶者
  • Spring知识点(五)代理模式

    使用代理模式的目的是为了将原来类生成一个代理类,由代理类来执行原来类的一些增强方法,但是也不影响原来类中方法的执行。

    虞大大
  • 2.3.1 理解动态代理 -《SSM深入解析与项目实战》

    Spring中AOP的拦截功能就是使用Java中的动态代理实现的。也就是在被代理类(方法)的基础上增加切面逻辑,生成代理类(方法)。切面的逻辑可以在目标类函数执...

    谙忆

扫码关注云+社区

领取腾讯云代金券