原文链接:
http://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_services.html
IntelliJ平台 提供了服务的概念。
服务会在你调用ServiceManager类的getService
方法时按需加载。
IntelliJ平台 确保只有一个服务的实例被加载,即使该服务被多次调用。 服务必须具有在plugin.xml
文件中指定接口和实现类。 服务实现类用于服务实例化。
IntelliJ平台 提供了三种类型的服务:应用级服务、项目级服务和模块级服务。
如何声明一个服务?
你可以使用以下IDEA核心的扩展点声明服务:
-
applicationService
:声明应用级服务; -
projectService
:声明项目级服务; -
moduleService
:声明模块级服务。
声明服务:
- 添加适当的子元素(
<applicationService>
、<projectService>
或<moduleService>
)到plugin.xml
文件的<extensions>
部分; - 在新增的子元素设置以下属性:
-
serviceInterface
:指定服务接口类; -
serviceImplementation
:指定服务实现类。
-
注意:接口和实现类可以相同。
要阐服务声明过程,请查看以下plugin.xml
文件的示例代码片段:
<extensions defaultExtensionNs="com.intellij">
<!-- 声明应用级服务 -->
<applicationService serviceInterface="Mypackage.MyServiceInterfaceClass" serviceImplementation="Mypackage.MyServiceImplClass" />
<!-- 声明项目级服务 -->
<projectService serviceInterface="Mypackage.MyProjectServiceInterfaceClass" serviceImplementation="Mypackage.MyProjectServiceImplClass" />
</extensions>
实例化服务
你可以使用以下语法在Java代码中实例化服务:
MyServiceImplClass service = ServiceManager.getService(MyServiceImplClass.class);
示例插件
你可以下载并安装一个示例插件了解如何插件和使用插件服务。这个插件是一个项目级组件,它实现了一个统计当前IDE打开项目数量的服务。如果项目打开的数量达到允许的最大值,插件会返回一个错误信息并关闭最近打开的项目。
安装并运行示例插件