美文网首页
java 的动态代理机制

java 的动态代理机制

作者: Ace_Chen | 来源:发表于2016-11-02 16:52 被阅读0次

在java 的动态代理机制中,有两个重要的类或者接口,一个是InvocationHandler(interface),

另一个则是Proxy(Class).

这一个类和接口是实现我们动态代理所必须用到的。

InvocationHandler:

每一个动态代理类都必须要实现InvocationHandler 这个接口,并且每个代理类的实例都关联到了

一个handler, 当我们通过代理对象调用一个方法的时候,这个方法的调用

就会被转发为由InvocationHandler这个接口的invoke方法来进行调用。

Object invoke(Object proxy, Method method, Object[] args)throwsThrowable

proxy:指代我们所代理的那个真实对象

method:指代的是我们所要调用真实对象的某个方法的Method对象

args:指代的是调用真实对象某个方法时接受的参数

Proxy:

Proxy这个类的作用就是用来动态创建一个代理对象的类,它提供了许多的方法,但是我们用的最多的就是newProxyInstance这个方法:

publicstaticObjectnewProxyInstance(ClassLoader loader, Class[] interfaces,  InvocationHandler h)throwsIllegalArgumentException

loader:一个ClassLoader对象,定义了由哪个ClassLoader对象来对生成的代理对象进行加载

interfaces:一个Interface对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我提供了一组接口给它,那么这个代理对象就宣称实现了该接口(多态),这样我就能调用这组接口中的方法了

h:一个InvocationHandler对象,表示的是当我这个动态代理对象在调用方法的时候,会关联到哪一个InvocationHandler对象上

动态代理的主要作用:

主要用来做方法的增强,让你可以在不修改源码的情况下,增强一些方法,在方法执行前后做任何你想做的事情(甚至根本不去执行这个方法),因为在InvocationHandler的invoke方法中,你可以直接获取正在调用方法对应的Method对象,具体应用的话,比如可以添加调用日志,做事务控制等。

Spring 的app切面编程, struct 的拦截器都用到了动态代理的思想

相关文章

  • Java 动态代理

    java的动态代理机制详解 JDK动态代理详解 Java核心技术点之动态代理

  • java反射和动态代理

    java动态代理Proxy.newProxyInstance 详解java代理机制(静态代理、动态代理)以及使用场景

  • Java动态代理

    Spring的核心AOP的原理就是java的动态代理机制。所以,我们需要好好将java动态代理机制进行梳理。 ...

  • Java 动态代理

    前言 关于动态代理 JDK动态代理 CGLIB动态代理 区别 java动态代理是利用反射机制生成一个实现代理接口的...

  • Java反射机制详解(二)

    本篇文章继续介绍Java反射机制,不同的是侧重于介绍动态代理。动态代理是代理模式中的一种,是通过Java反射机制来...

  • Java反射机制总结(二)

    本篇文章继续介绍Java反射机制,不同的是侧重于介绍动态代理。动态代理是代理模式中的一种,是通过Java反射机制来...

  • Jdk动态代理 底层源码分析

    前言 java动态代理主要有2种,Jdk动态代理、Cglib动态代理,本文主要讲解Jdk动态代理的使用、运行机制、...

  • Java 动态代理及 RPC 框架介绍

    动态代理是什么 java动态代理机制 动态代理的应用 最后 所谓动态代理,指的是语言提供的一种语法,能够将对对象中...

  • Java动态代理

    Java动态代理 引言 最近在看AOP代码,其中利用到了Java动态代理机制来实现AOP织入。所以好好地把Java...

  • Spring笔记

    1.Spring用到的动态代理分为java动态代理和CGILB动态代理,相同点是都是通过反射机制创建运行时被代理类...

网友评论

      本文标题:java 的动态代理机制

      本文链接:https://www.haomeiwen.com/subject/xfovuttx.html