java.rmi.Naming和java.rmi.registry.LocateRegistry之间的区别

dem*_*onz 14 java rmi

在研究RMI时(首先是Java)老兄使用

Naming.rebind(name, object) 
Run Code Online (Sandbox Code Playgroud)

但是网络上的其他人(oracle)使用

Registry registry = LocateRegistry.getRegistry();
registry.rebind(name, object);
Run Code Online (Sandbox Code Playgroud)

我知道hf java有点旧,但我没有看到Naming类已被弃用.

那么,那有什么区别呢?

Gra*_*ray 8

[什么是] java.rmi.Naming和之间的区别java.rmi.registry.LocateRegistry

不同之处在于,name字段to Naming.rebind()解析为URL,而" Registry.rebind()与远程引用关联的名称".该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);
}
Run Code Online (Sandbox Code Playgroud)


mpr*_*hat 6

如果您查看源代码没有区别,那么您将看到:

public static void rebind(String name, Remote obj)
throws RemoteException, java.net.MalformedURLException {
    ParsedNamingURL parsed = parseURL(name);
    Registry registry = getRegistry(parsed);

    if (obj == null)
        throw new NullPointerException("cannot bind to null");

    registry.rebind(parsed.name, obj);
}
Run Code Online (Sandbox Code Playgroud)

免责声明:从JDK获取的代码不是我自己的impl.

类似的问题在这里