在研究RMI时(有时是头等Java的人)

Naming.rebind(name, object)

但是网络上的其他人(oracle)使用
Registry registry = LocateRegistry.getRegistry();
registry.rebind(name, object);

我知道HF Java有点旧,但是我看不到Naming类被弃用。

那么,有什么区别呢?

最佳答案



区别在于nameNaming.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);
}

10-08 14:33