java - 查找是如何工作的?

标签 java netbeans openide

我有 BeanTreeView 和其中的一些节点。每个节点都有构造函数

public class ProjectNode extends AbstractNode {

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

}

我将 Rootnode 设置为 ExplorerTopComponent 中树的根,如下所示:

private final ExplorerManager mgr = new ExplorerManager();

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

现在,我如何从某个节点获取 MainProject obj?我需要在另一个类(class)得到它。

最佳答案

Hi badgirl/Joseph ;-)

回答您问题的标题(与 netbeans 内部无关):

我认为 this question 回答了您的问题 what the lookup is 的一点点:检索所提供 key 的一个或多个实现,该 key 通常是一个接口(interface)。

然后约瑟夫问:“哪种简单模式可以取代这个反模式?”。 您无法替换 NetBeans 平台中的查找模式,但要回答他的问题:我会使用 dependency injection 而不是通过手动接线、guice、pico 容器甚至 spring 在我的应用程序中进行查找。 这种库的好处是您只需配置依赖项并从容器中检索正确配置的实例。请参阅 this nice picture 来感受一下。 (大多数依赖注入(inject)工具还允许生命周期管理。)

为了给出通过手动连接进行依赖注入(inject)的示例,假设以下类:

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

现在您可以轻松地用 LinkedList 切换 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);
}

但说实话:我更喜欢简单的依赖注入(inject)方式。阅读 this introduction,他们还比较了查找和依赖注入(inject)(构造函数 + setter 注入(inject))。

有关更多信息,请阅读 this interesting article from martin fowler,它描述了服务定位器(查找)和控制反转(依赖注入(inject))。阅读此处有关 history of dependency injection 的信息。

关于java - 查找是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2526758/

相关文章:

java - 设置舞台图标

java - 如何使用卡片向 RecyclerView 添加 searchBar

java - 如何修复“JPasswordField 中的 getText() 已被弃用”

java - 字符串等于不适用于对象

java - 如何修复丢失 token 错误

java - 两个 Spring WebFlow 项目共享数据的最佳方式

java - 关于可执行jar文件

java - 如何设置变量值并从 Netbeans 中的变量值开始运行?

java - netbeans平台教程问题