2010-03-26 46 views
0

我有BeanTreeView和其中的一些節點。每個節點都有構造器查找工作如何?

public class ProjectNode extends AbstractNode { 

public ProjectNode(MainProject obj, DiagramsChildren childrens) { 
    super (new ProjectsChildren(), Lookups.singleton(obj)); 
    setDisplayName (obj.getName()); 

} 

我ExplorerTopComponent設置根節點爲根的樹,因爲這:

private final ExplorerManager mgr = new ExplorerManager(); 

public ExplorerTopComponent() { 
    associateLookup (ExplorerUtils.createLookup(mgr, getActionMap())); 
    mgr.setRootContext(new RootNode()); 
} 

而現在,我怎麼可以從一些節點獲得MainProject OBJ?我需要在另一個班上學習。

回答

1

Hi badgirl/Joseph ;-)

要回答你的問題的標題(有關NetBeans內部沒有):

我覺得this question回答您的問題what the lookup is一點點:檢索一個或多個實施提供通常是界面的鍵。然後約瑟夫問道:'哪種簡單的圖案可以代替這種反面圖案?'。 您無法替換NetBeans平臺中的查找模式,但要回答他的問題:我將使用dependency injection而不是通過手動接線,guice,pico容器甚至彈簧在我的應用程序中查找。 關於這樣一個庫的好處在於,您只需配置依賴關係並從容器中檢索正確配置的實例。看到this nice picture得到這個感覺。 (最依賴注入工具還允許生命週期管理)。

要給出了通過手工佈線依賴注入的例子假設下面的類:

class Path { 
    List edges = new ArrayList(); 
    public void setEdges(List e) { 
    edges = e; 
    } 
} 

現在您可以輕鬆切換的ArrayList實現了鏈表:

p = new Path(); 
p.setEdges(new LinkedList()); 

與查找的概念,這是不容易的(但我不知道):

class Path { 
    List edges = Lookup.create(List.class); 
} 

現在用鏈表更換的使用是直截了當:

Lookup.set(List.class, LinkedList.class); 
p = new Path();  

但問題是:你將如何使用查詢,如果你有這需要一個List實現幾個不同的類?

你這取決於使用它的類實現您的查找:

class Path { 
    List edges = Lookup.get(Path.class).create(List.class); 
} 

但說實話:我更喜歡簡單的依賴注入方式。閱讀this introduction,他們還在這裏比較查找和依賴注入(構造函數+ setter注入)。

欲瞭解更多信息,請閱讀this interesting article from martin fowler描述服務定位器(查找)和控制反轉(依賴注入)。在這裏閱讀有關history of dependency injection