java.lang.Object java.rmi.server.RemoteObject java.rmi.server.RemoteObjectInvocationHandler
public class RemoteObjectInvocationHandler
与 Java Remote Method Invocation(Java 远程方法调用,即 Java RMI)一起使用的 InvocationHandler
接口的实现。此调用处理程序可以与取代预生成 stub 类的动态代理实例一起使用。
不期望应用程序直接使用此类。使用具有 UnicastRemoteObject
或 Activatable
的动态代理导出的远程对象将此类的实例作为该代理的调用处理程序。
字段摘要 |
---|
从类 java.rmi.server.RemoteObject 继承的字段 |
---|
ref |
构造方法摘要 | |
---|---|
RemoteObjectInvocationHandler(RemoteRef ref) 创建一个用指定 RemoteRef 构造的新 RemoteObjectInvocationHandler 。 |
方法摘要 | |
---|---|
Object |
invoke(Object proxy, Method method, Object[] args) 处理在封装的代理实例 proxy 上进行的方法调用并返回结果。 |
从类 java.rmi.server.RemoteObject 继承的方法 |
---|
equals, getRef, hashCode, toString, toStub |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
public RemoteObjectInvocationHandler(RemoteRef ref)
RemoteRef
构造的新
RemoteObjectInvocationHandler
。
ref
- 远程引用
NullPointerException
- 如果
ref
为
null
方法详细信息 |
---|
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
proxy
上进行的方法调用并返回结果。
RemoteObjectInvocationHandler
按以下方式实现此方法:
如果 method
为以下方法之一,则按下面描述的方式处理:
Object.hashCode
: 返回该代理的哈希码值。 Object.equals
: 如果参数 (args[0]
) 是动态代理类的一个实例,且此调用处理程序等于该参数的调用处理程序,则返回 true
;否则返回 false
。 Object.toString
: 返回该代理的字符串表示形式。 否则,按以下方式进行远程调用:
proxy
不是接口 Remote
的实例,则抛出 IllegalArgumentException
。 RemoteRef
上调用 invoke
方法,传递 proxy
、method
、args
和 method
的哈希码值(在“Java Remote Method Invocation (RMI) 规范”的 section 8.3 中定义)并返回结果。 RemoteRef.invoke
抛出异常,且该异常是一个经检查的异常,不能指派给由 proxy
类实现的方法的 throws
子句中的任何异常,则该异常在 UnexpectedException
中包装且抛出该包装的异常。否则,由此方法抛出的 invoke
抛出该异常。 如果包含此调用处理程序的某个有效动态代理类的实例尚未生成参数,则此方法的语义是不确定的。
InvocationHandler
中的
invoke
proxy
- 在其上调用方法的代理实例
method
- 与在代理实例上调用的接口方法相对应的
Method
实例
args
- 包含传入到代理实例上方法调用的参数值的对象数组;如果该方法不用参数,则为
null
Throwable
- 从代理实例上的方法调用抛出的异常