`
alartin
  • 浏览: 209814 次
社区版块
存档分类
最新评论

Netbeans平台: 我该使用何种注册方式呢?

阅读更多
我们知道在Netbeans平台中有四种注册/安装方式:
  • 在模块的JAR文件的META-INF/services目录下增加文件条目
  • 在系统文件系统下的某目录下增加文件
  • 在模块的manifest文件中增加manifest条目
  • 实现org.openide.modules.ModuleInstall类并且在manifest文件中配置, 这种方式是在系统启动时执行Java代码
我们知道模块的注册和安装其实在Netbeans平台中是同一个概念. 那么我们究竟应该使用何种方式进行注册呢?

具体情况具体分析:

如果我们正在实现其他模块提供的API, 那么这个模块应该告诉我们如何做. 如果它告诉你应该使用默认的lookup查询, 那么这就意味着使用META-INF/services机制.

如果我们正在定义自己开发的模块的API, 其他模块将实现这个API并且提供自己的类(想一下IDE的Navigator组件,不同的模块注册句柄能够按照不同的文件类型显示Navigator工具), 那么,很明显,基于manifest的注册机制首先就不在考虑范围之内, 因为在manifest条目中无法增加新类型. 程式化的注册机制也是能不用就不用, 因为弹性太差. 所以只剩下 META-INF/services机制或者系统文件系统机制. 我们可以考虑几个问题:

Is this just a simple interface or abstract class people should implement, and I just have to find them all and use them?

A: If so, use META-INF/services

Q: Will all of the objects other modules will register be used at the same time, or are there subsets for specific contexts?

A: This pertains to performance and scalability - wherever possible, you want to avoid actually instantiating the objects other modules install, and delay instantiating them until they really need to be used. Opening module jars and classloading are both expensive operations that slow things down.

If there will potentially be a large number of subclasses of your interface, try to find a way to divide them into context-appropriate categories and use folders in the system filesystem to partition contexts. For example, if you define the interface Eater, and modules will implement eaters of various foods, you probably should create folders for different general kinds of food. That way, you don't have to load a bunch of classes and create the OliveEater, BreadEater, EggEater and SausageEater just to ask them if they can eat the Pizza you came across.

Q: Is there information needed about how each object is to be used which could be provided declaratively, without instantiating the object?

A: If so, use the system filesystem, and either let modules declare file attributes thatprovide additional information, or let modules put their objects in subfolders that have contextual meaning (the same way the folder Loaders/text/x-java uses the folder path to indicate the data type objects pertain to).

Q: How many modules will actually implement my interface? How many objects from other modules will I typically be dealing with? Do I need to instantiate all of them just to display a list in the UI?

A: Displaying things in the UI is a particularly important case: You do not want to have to load a bunch of classes from a module just to show an icon and a display name for something - this pertains to anything you're going to display in the Options dialog, on Menus, or various other views.

You can solve this by using .instance files and asking that modules implementing your API use the file attributes defined for .instance files to declare the icon and display name. Then your code can just get a FileObject for each registered instance, call DataObject.find(theFileObject).getNodeDelegate().getIcon() or getDisplayName() to get the icon or display name of the object without ever having to create the object until it needs to do real work.

If you run the risk of having to instantiate all the objects in a folder just do trivial tests such as finding out how many objects of one class are in a given folder (which may contain objects of other classes), consider recommending .settings files instead of .instance files in your folders.

分享到:
评论

相关推荐

    NetBeans图书:Pro NetBeans IDE 5.5 Enterprise Edition

    Written for Java™ developers of varying skill and familiarity with the open source NetBeans™ IDE as well as Java IDEs in general, Pro NetBeans™ IDE 5.5 Enterprise Edition focuses on using ...

    NetBeans 教程(如何使用NetBeans)

    这个教程将带你深入了解如何有效地使用NetBeans来编译和运行Java程序。NetBeans以其直观的用户界面、丰富的特性集以及对Java SE、Java EE和Java ME的支持而受到开发者们的青睐。 1. **安装与启动NetBeans** - 下载...

    Ubuntu配置Netbeans8.2

    5. 启动 Netbeans:在配置环境变量之后,我们可以在命令行中输入 Netbeans 来启动该应用程序。 6. 创建项目:在 Netbeans 中,我们可以创建新的 C/C++ 项目,包括 Fortran 项目。 知识点总结 * Ubuntu 是一个流行...

    语言程序设计资料:NetBeans使用教程.doc

    NetBeans 使用教程 NetBeans 是一个流行的集成开发环境(IDE),它提供了一个功能强大且灵活的平台 для开发 Java 应用程序。在本教程中,我们将学习如何使用 NetBeans 创建一个 Java 应用程序,并编写用于测试的...

    NetBeans使用教程入门篇

    ### NetBeans使用教程入门篇知识点详解 #### 一、NetBeans简介及安装 - **NetBeans概述**:NetBeans是一款开源且免费的集成开发环境(IDE),由Oracle公司支持(原Sun Microsystems)。它支持多种编程语言,包括...

    NetBeans富客户端编程权威教程

    《NetBeans富客户端编程权威教程》是一本深入探讨如何利用NetBeans平台进行高效、复杂的桌面应用开发的专业书籍。NetBeans是Java开发环境中的一个强大工具,尤其在构建富客户端应用程序(Rich Client Applications, ...

    netbeans:Apache NetBeans

    Apache NetBeans是一个开源开发环境,工具平台和应用程序框架。 建造状态 GitHub动作 TravisCI: Apache Jenkins: Linux: 视窗: 要求 吉特 蚂蚁1.9.9或以上 JDK 8或11(用于构建NetBeans) JDK 9或更高版本...

    NetBeans+IDE+使用说明和示例教程.pdf

    ### NetBeans IDE 使用说明与示例教程 #### 准备工作与环境搭建 - **下载与安装** - 下载地址:本教程推荐了几个官方下载站点,包括`http://www.neea.edu.cn`、`http://www.ncre.cn/`以及`...

    NETBeans+IDE使用说明

    NetBeans IDE 使用说明 本文档提供了 NetBeans IDE 的使用说明,包括准备、基本概念、实践示例等内容。通过本文档,读者可以快速掌握 NetBeans IDE 的使用方法,并了解 NetBeans IDE 中国教育考试版(2007)的特点...

    NetBeans lookup的例子

    Lookup机制是基于Java的Service Provider Interface (SPI)设计的,它提供了一种灵活的方式来查找和获取满足特定接口或类的实例。在NetBeans平台上,任何实现了`java.util.ServiceProvider`接口的类都可以作为服务...

    NetBeansIDE 6.7的安装与使用

    * 左侧默认打开的窗口可以在 3 种方式间切换,分别为项目窗口、文件窗口、服务窗口 * 项目窗口中,分类显示整个项目的资源 * 文件窗口中,显示项目中各文件的物理存储位置 * 服务窗口则提供对服务的管理,如 WEB ...

    语言程序设计资料:第13章_开发工具:NetBeans的使用.ppt

    语言程序设计资料:第13章_开发工具:NetBeans的使用.ppt

    netbeans-platform7.pdf

    - **NetBeans IDE**:下载最小版本的 NetBeans IDE(即 Java SE 版本),该版本提供了 NetBeans 平台工具包,包括模板和示例项目。你可以选择使用 Ant 或 Maven 构建系统来进行项目构建。 - **命令行 Maven**:使用 ...

    使用NetBeans设计GUI(零基础入门) by zhrb

    使用 NetBeans 设计 GUI NetBeans 是一个功能强大且流行的集成开发环境(IDE),它提供了一个有助于快速设计 GUI 的图形化界面。通过使用 NetBeans,可以轻松创建复杂的 GUI 界面,而无需编写大量代码。 NetBeans ...

    hibernate for netbeans 6.1

    总之,Hibernate for NetBeans 6.1为开发者提供了一个强大且便捷的平台,使他们能够在Java应用中轻松地管理和操作数据库,同时保持高效的开发流程。尽管它可能不适用于所有NetBeans版本,但对于使用NetBeans 6.1的...

    Netbeans使用教程

    ### Netbeans 使用教程详解 #### 一、Netbeans 概述 Netbeans 是一款由 Sun Microsystems 开发并开源的集成开发环境(Integrated Development Environment,IDE)。它不仅支持 Java 开发,还支持 C/C++ 等多种编程...

    NetBeansNetBeans

    NetBeans当前可以在Solaris、Windows、Linux和Macintosh OS X平台上进行开发,并在SPL(Sun公用许可)范围内使用。 NetBeans包括开源的开发环境和应用平台,NetBeans IDE可以使开发人员利用Java平台能够快速创建Web、...

    NetBeans Ruby and Rails IDE with JRuby 2009

    - **为现有NetBeans添加Ruby支持**:如果你已经安装了NetBeans但没有Ruby插件,可以通过添加Ruby插件的方式来增强其功能。 #### 二、初步尝试IDE - **创建Ruby项目**:通过简单的几个步骤即可创建一个新的Ruby项目...

Global site tag (gtag.js) - Google Analytics