據我可以看到,給定一個IFoo
界面延伸Remote
和FooImpl
類實施IFoo
,下面的兩個代碼片段是(幾乎)相等的:(1)RMI和引用/代理類
IFoo stub = (IFoo)UnicastRemoteObject.exportObject(new FooImpl());
Naming.bind("foo", stub);
並且,如果是FooImpl
延伸UnicastRemoteObject
的類:(2)
Naming.bind("foo", new FooImpl());
事實上,FooImpl
實例出口在隱完成構造函數調用。
但在(1)中,由UnicastRemoteObject.exportObject()
返回的對象是Proxy
(動態)類,因此記錄在RMI註冊表中的對象顯然是一個參考。而在(2)中,不清楚。
Proxy
建設基於實現的一個實例
FooImpl
?我已經看到,在客戶端代碼(Naming.bind()
)RMI註冊表管理封裝了(註冊表)Proxy
類的創建與到LocateRegistry.getRegister()
通話。因此,在請求:
Naming.bind("foo", new FooImpl())
難道是處理擴展Remote
把它們轉化爲引用/ Proxy
類的參數註冊表Proxy
類調用處理程序?
在此情況下,考慮到存根Proxy
類(1)中本身是一個Remote
類,將其意味着存儲在註冊表中的對象是對基準的基準(即Proxy
調用另一個Proxy
調用真正的課堂)?
謝謝。
感謝。它是否意味着在(1)中,'Naming.bind(「foo」,new FooImpl());'應該優先於'Naming.bind(「foo」,stub);'? – lledr 2012-01-01 10:15:50
@ysomane恰恰相反,它意味着它沒有任何區別。您可能有其他原因希望第二個選擇,例如保留對遠程對象的引用,以便您可以將其導出。 – EJP 2012-01-08 00:50:35