java.lang.Object
java.rmi.server.RemoteObject
java.rmi.server.RemoteObjectInvocationHandler
- 所有已实现的接口:
-
Serializable,InvocationHandler,Remote
用于Java远程方法调用(Java RMI)的
InvocationHandler接口的实现。此调用处理程序可与动态代理实例一起使用,作为预生成存根类的替代品。
不建议应用程序直接使用此类。导出为使用动态代理的远程对象,其代理的调用处理程序是该代理的调用处理程序的实例。
- 自:
- 1.5
- 参见:
-
Field Summary
Fields declared in class java.rmi.server.RemoteObject
ref -
Constructor Summary
ConstructorsConstructorDescription创建一个使用指定RemoteRef构造的新RemoteObjectInvocationHandler。 -
Method Summary
-
Constructor Details
-
RemoteObjectInvocationHandler
创建一个使用指定RemoteRef构造的新RemoteObjectInvocationHandler。- 参数:
-
ref- 远程引用 - 抛出:
-
NullPointerException- 如果ref为null
-
-
Method Details
-
invoke
处理对封装代理实例proxy进行的方法调用,并返回结果。RemoteObjectInvocationHandler实现此方法如下:如果
method是以下方法之一,则按照下面描述的方式处理:Object.hashCode: 返回代理的哈希码值。Object.equals: 如果参数(args[0])是动态代理类的实例,并且此调用处理程序等于该参数的调用处理程序,则返回true,否则返回false。Object.toString: 返回代理的字符串表示形式。
如果
method覆盖了Object.finalize,则会被忽略。否则,将按以下方式进行远程调用:
- 如果
proxy不是接口Remote的实例,则会抛出一个IllegalArgumentException。 - 否则,将在此调用处理程序的
RemoteRef上调用invoke方法,传递proxy、method、args和方法哈希值(在"Java远程方法调用(RMI)规范"的第8.3节中定义)给method,并返回结果。 - 如果
RemoteRef.invoke引发异常,并且该异常是一个已检查异常,且不可分配给proxy类的方法实现的throws子句中的任何异常,则将该异常包装在一个UnexpectedException中,并抛出包装的异常。否则,由此方法抛出invoke引发的异常。
如果参数无法由包含此调用处理程序的某个有效动态代理类的实例生成,则此方法的语义未指定。
- 指定者:
-
invoke在接口InvocationHandler - 参数:
-
proxy- 调用方法的代理实例 -
method- 对应于代理实例上调用的接口方法的Method实例 -
args- 包含在代理实例上方法调用中传递的参数值的对象数组,如果方法不带参数,则为null - 返回:
- 从代理实例上的方法调用返回的值
- 抛出:
-
Throwable- 从代理实例上的方法调用中抛出的异常 - 参见:
-