2013-07-04 98 views
-1

我不得不開發,它們通過RMI通信的客戶端和服務器組件。動態RMI方法生成

public interface Test { 
    public String getInformation(); 
} 

public class TestImpl implements Test { 

    public String getInformation() { 
     return 「Hello」; 
    } 
} 

此測試界面支持RMI客戶端,但無法在這個測試接口和TestImpl類,但這些類名,方法名,參數,返回類型可作爲元數據RMI服務器執行(保存在DB中)。我需要在服務器端虛擬生成Test和TestImpl類,並將它們注入到RMI服務器。我該怎麼做呢?

+0

嘗試春天與其依賴注入引擎。你已經在這裏重塑了很多車輪。 – duffymo

+0

定義。定義'動態RMI方法生成'。定義'虛擬生成'。定義爲什麼你顯然需要測試不存在的服務。 – EJP

回答

0

如果你想產生從類名,方法名,參數類型的RMI服務器類,返回類型等無論是存儲在數據庫或以某種方式一樣,你可以使用任何的多家知名字節碼檢測工具像ASM(最流行的),JavassistBCEL(嵌入版本也是JDK可用自至少版本1.5)。 (我不確定「虛擬」世代是什麼意思,「虛擬」和「非虛擬」世代之間有什麼區別)。 的注射,如果你的意思java.rmi.registry.Registry中的登記一樣here,生成的類的實例是微不足道的,不從任何其他RMI服務器的「注入」不同。

補充說明一下:看來你有相當不尋常的設計。在數據庫中存儲類名稱,方法名稱等是一回事。另一個是,所有這些信息都是在客戶端定義的,而通常情況是這樣。 無論如何,如果你需要去與這個設計,那麼,作爲一個選項,你可以考慮在DB接口存儲編譯(二進制)形式的.class文件,而不是類名的文本定義,方法名等在這種情況下,你不需要搞亂字節代碼的生成,並且可以使用簡單的Java反射代理/ InvocationHandler,或者在最壞的情況下使用簡單的CGLIB代理。