- java.lang.Object
-
- java.rmi.server.RemoteObject
-
- java.rmi.server.RemoteObjectInvocationHandler
-
- All Implemented Interfaces:
-
Serializable
,InvocationHandler
,Remote
public class RemoteObjectInvocationHandler extends RemoteObject implements InvocationHandler
用于Java Remote Method Invocation(Java RMI)的InvocationHandler
接口的实现。 此调用处理程序可以与动态代理实例一起使用,作为预生存存根类的替代。应用程序不会直接使用此类。 导出为使用具有
UnicastRemoteObject
或Activatable
的动态代理的远程对象具有该类的实例作为该代理的调用处理程序。- 从以下版本开始:
- 1.5
- 另请参见:
- Serialized Form
-
-
Field Summary
-
Fields inherited from class java.rmi.server.RemoteObject
ref
-
-
构造方法摘要
构造方法 Constructor 描述 RemoteObjectInvocationHandler(RemoteRef ref)
创建一个新的RemoteObjectInvocationHandler
构造与指定的RemoteRef
。
-
-
-
构造方法详细信息
-
RemoteObjectInvocationHandler
public RemoteObjectInvocationHandler(RemoteRef ref)
创建一个新的RemoteObjectInvocationHandler
构造与指定的RemoteRef
。- 参数
-
ref
- 远程参考 - 异常
-
NullPointerException
- 如果ref
是null
-
-
方法详细信息
-
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
,传递proxy
,method
,args
,并且该方法散列(在“Java远程方法调用(RMI)规范”的第8.3节中定义)method
,并且将结果返回。 - 如果
RemoteRef.invoke
抛出异常,并且该异常是由proxy
的类实现的方法的throws
子句中不能分配给任何异常的检查异常,则该异常被包装在一个UnexpectedException
中,并且引发了包装的异常。 否则,此方法抛出invoke
抛出的异常。
如果参数不能由包含此调用处理程序的一些有效动态代理类的实例生成,则该方法的语义是未指定的。
- Specified by:
-
invoke
在接口InvocationHandler
- 参数
-
proxy
- 调用该方法的代理实例 -
method
- 对应于在代理实例上调用的接口方法的方法
实例 -
args
- 包含代理实例上方法调用中传递的参数值的对象数组,如果该方法没有参数,null
- 结果
- 从代理实例上的方法调用返回的值
- 异常
-
Throwable
- 从代理实例上的方法调用抛出的异常 - 另请参见:
-
UndeclaredThrowableException
-
-
-