zoukankan      html  css  js  c++  java
  • java的动态代理机制

    Spring的AOP的原理就是java的动态代理机制;

    在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。

    每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由InvocationHandler这个接口的 invoke 方法来进行调用。我们来看看InvocationHandler这个接口的唯一一个方法 invoke 方法:啊

    Object invoke(Object proxy, Method method, Object[] args) throws Throwable
    其中的三个参数:
      proxy:指代我们所代理的那个真实对象;method:指代的是我们所要调用真实对象的某个方法的Method对象;args:指代的是调用真实对象某个方法时接受的参数

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

    public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException

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

      interfaces:  一个Interface对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我提供了一组接口给它,那么这个代理对象就宣称实现了

            该接口(多态),这样我就能调用这组接口中的方法了

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


    参考自:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html
  • 相关阅读:
    Js/Jquery获取iframe中的元素
    js常用技巧汇总
    jquery常用技巧
    Tomcat远程调试
    常用SQL
    CRM-stark组件
    面试题-linux基础
    vue2-通过axios实现数据请求
    Vue01
    面试题之python基础
  • 原文地址:https://www.cnblogs.com/yzf666/p/6402581.html
Copyright © 2011-2022 走看看