Module java.rmi
Package java.rmi.server

Class RemoteObjectInvocationHandler

java.lang.Object
java.rmi.server.RemoteObject
java.rmi.server.RemoteObjectInvocationHandler
所有已实现的接口:
Serializable, InvocationHandler, Remote

public class RemoteObjectInvocationHandler extends RemoteObject implements InvocationHandler
用于Java远程方法调用(Java RMI)的InvocationHandler接口的实现。此调用处理程序可与动态代理实例一起使用,作为预生成存根类的替代品。

不建议应用程序直接使用此类。导出为使用动态代理的远程对象,其代理的调用处理程序是该代理的调用处理程序的实例。

自:
1.5
参见:
  • Constructor Details

    • RemoteObjectInvocationHandler

      public RemoteObjectInvocationHandler(RemoteRef ref)
      创建一个使用指定RemoteRef构造的新RemoteObjectInvocationHandler
      参数:
      ref - 远程引用
      抛出:
      NullPointerException - 如果refnull
  • Method Details

    • invoke

      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
      处理对封装代理实例proxy进行的方法调用,并返回结果。

      RemoteObjectInvocationHandler实现此方法如下:

      如果method是以下方法之一,则按照下面描述的方式处理:

      • Object.hashCode: 返回代理的哈希码值。
      • Object.equals: 如果参数(args[0])是动态代理类的实例,并且此调用处理程序等于该参数的调用处理程序,则返回true,否则返回false
      • Object.toString: 返回代理的字符串表示形式。

      如果method覆盖了Object.finalize,则会被忽略。

      否则,将按以下方式进行远程调用:

      • 如果proxy不是接口Remote的实例,则会抛出一个IllegalArgumentException
      • 否则,将在此调用处理程序的RemoteRef上调用invoke方法,传递proxymethodargs和方法哈希值(在"Java远程方法调用(RMI)规范"的第8.3节中定义)给method,并返回结果。
      • 如果RemoteRef.invoke引发异常,并且该异常是一个已检查异常,且不可分配给proxy类的方法实现的throws子句中的任何异常,则将该异常包装在一个UnexpectedException中,并抛出包装的异常。否则,由此方法抛出invoke引发的异常。

      如果参数无法由包含此调用处理程序的某个有效动态代理类的实例生成,则此方法的语义未指定。

      指定者:
      invoke 在接口 InvocationHandler
      参数:
      proxy - 调用方法的代理实例
      method - 对应于代理实例上调用的接口方法的Method实例
      args - 包含在代理实例上方法调用中传递的参数值的对象数组,如果方法不带参数,则为null
      返回:
      从代理实例上的方法调用返回的值
      抛出:
      Throwable - 从代理实例上的方法调用中抛出的异常
      参见: