Module  java.rmi
软件包  java.rmi.server

Class RemoteObjectInvocationHandler

  • All Implemented Interfaces:
    SerializableInvocationHandlerRemote


    public class RemoteObjectInvocationHandler
    extends RemoteObject
    implements InvocationHandler
    用于Java Remote Method Invocation(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