在研究RMI时(有时是头等Java的人)
Naming.rebind(name, object)
但是网络上的其他人(oracle)使用
Registry registry = LocateRegistry.getRegistry();
registry.rebind(name, object);
我知道HF Java有点旧,但是我看不到Naming类被弃用。
那么,有什么区别呢?
最佳答案
区别在于name
的Naming.rebind()
字段为parsed as an URL,而Registry.rebind()
则为"name to associate with the remote reference"。 LocateRegistry.getRegistry()
调用假定注册表在默认端口的本地主机上,而Naming.rebind()
允许您指定要使用的注册表。
在Java 1.6下,Naming.rebind()
将name
解析为URL,并使用注册表的主机/端口调用Naming.getRegistry()
。那叫LocateRegistry.getRegistry(host, port)
。
public static void rebind(String name, Remote obj) throws RemoteException, MalformedURLException
ParsedNamingURL parsed = parseURL(name);
Registry registry = getRegistry(parsed);
if (obj == null)
throw new NullPointerException("cannot bind to null");
registry.rebind(parsed.name, obj);
}
...
private static Registry getRegistry(ParsedNamingURL parsed) throws RemoteException {
return LocateRegistry.getRegistry(parsed.host, parsed.port);
}