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
ConstructorDescription创建一个使用指定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
- 从代理实例上的方法调用中抛出的异常 - 参见:
-