2011-07-01 55 views
0

我有兩個對象Node1和Node2,都使用Bean1(JavaBean)。在其他bean中重用JavaBean類

我試圖在Node1和Node2中包含Bean1的屬性,而無需手動重複Bean1的屬性。另外,我試圖在兩個對象中重用Bean1的BeanInfo。

我正在考慮使用cglib,但它有可能嗎?

更多細節: 節點正在建模工作的輸入即,節點1是作業1輸入等。輸入類型可能有一個共同的類型,即Bean1。比如說,Bean1有一個屬性bean1Prop,Node1有一個屬性node1Prop,Node2有一個屬性node2Prop。

我需要類似 Node1 {node1Prop,bean1Prop}和Node2 {node2Prop,bean1Prop}。請注意,每個節點在init中都會有一個單獨的Bean1實例。現在,我可以通過授權手動獲取屬性,我不想這樣做以避免代碼重複。我只想告訴每個節點類我想使用Bean1的bean屬性。

cglib似乎能夠在運行時創建這樣的對象。但我猜運行時類型只是一個對象?另外,Bean1有一個beaninfo類,我想在Node1BeanInfo(通過getAdditionalBeanInfo())中重用,同樣在Node2BeanInfo中。

我不確定Node1BeanInfo和Node2BeanInfo是否會被cglib識別(通過JavaBeanTool)作爲運行時生成對象的beaninfo類。

我必須補充說,我從來沒有使用過cglib。

我的主要目標是避免代碼重複,在這種情況下,當一個常用類型用於許多作業輸入(這是很常見的)時,這將非常重要。

我很欣賞你對此的看法。

+0

是的是否有任何理由說Node1和Node2不能擴展Bean1? –

+0

請用更精確的語言,這個問題中的細節很重要。 – skaffman

回答

0

我不知道你的意思,但它聽起來像這樣:

public class Node1 { 
    private Bean1 bean1; 

    public Node1(Bean1 bean1) { 
     this.bean1 = bean1; 
    } 
} 


public class Node2 { 
    private Bean1 bean1; 

    public Node2(Bean1 bean1) { 
     this.bean1 = bean1; 
    } 
} 

只是要小心:如果節點1和節點都指向同一個Bean1情況下,你不用擔心的變化一個班級立即對另一個班級可見。在這種安排下,你可能會造成一些令人討厭的驚喜。

0

是的,Bean是重用代碼的好方法。

不,沒有理由Node1和Node2不能共享Bean1來實現相同的功能。其實他們應該是

到目前爲止,一切都很好...

如果你想你的節點之間共享狀態,然而,你的第一個問題是你怎麼想保存的狀態。

簡單的辦法:寫一個明確的文本屬性文件

另一種方法:在數據庫

不管採用哪種方法存儲屬性,你可以: 一)已豆在啓動時讀取的屬性(從數據庫,屬性文件等) 二)有你的客戶端查詢該屬性值

另一個替代豆:只要硬編碼在bean :)值