模块  java.rmi
软件包  java.rmi.server

Class RemoteObjectInvocationHandler

  • 实现的所有接口
    SerializableInvocationHandlerRemote

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

    预计应用程序不会直接使用此类。 导出为使用UnicastRemoteObjectActivatable的动态代理的远程对象具有此类的实例作为该代理的调用处理程序。

    从以下版本开始:
    1.5
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • RemoteObjectInvocationHandler

        public RemoteObjectInvocationHandler​(RemoteRef ref)
        创建一个新的 RemoteObjectInvocationHandler用指定的构建 RemoteRef
        参数
        ref - 远程参考
        异常
        NullPointerException - 如果 refnull
    • 方法详细信息

      • invoke

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

        RemoteObjectInvocationHandler实现此方法如下:

        如果method是以下方法之一, method如下所述进行处理:

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

        如果method覆盖Object.finalize ,则忽略它。

        否则,远程调用如下:

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

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

        Specified by:
        invoke在界面 InvocationHandler
        参数
        proxy - 调用该方法的代理实例
        method - 与代理实例上调用的接口方法对应的 方法实例
        args - 包含代理实例上方法调用中传递的参数值的对象数组,如果方法不带参数, null
        结果
        从代理实例上的方法调用返回的值
        异常
        Throwable - 从代理实例上的方法调用中抛出的异常
        另请参见:
        UndeclaredThrowableException