- 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
-
-
-