Intellij IDEA 的自定义插件可以在其代码中使用 DI 吗?

Can custom plugin for Intellij IDEA use DI in its code?

我正在为 Intellij IDEA 2018.2+ 开发一个插件,它将提供一些额外的检查。

我已经了解到有一个plugin.xml文件,它是插件的"heart",负责插件的主要行为。

据我了解,要实现(例如)额外的检查行为,我们需要在 plugin.xml 中定义 inspectionToolProvider 并继承 InspectionToolProvider 接口。为其他扩展定义了相同的结构 - 我们需要在 .xml 中定义一些东西并实现一些接口。

困扰我的是,如果我想实现一些或多或少复杂的算法,看起来我需要使用很多静态方法和实用程序 类,因为我还没有找到在插件开发期间使用 DI 的方式(例如 Spring 一种)。

一些 examples in Intellij IDEA SDK docs 还将 "helper" 方法显示为实用程序 类 中定义的静态方法。

所以总体问题:有没有办法在 Intellij IDEA 插件开发过程中使用依赖注入

IntelliJ IDEA 有自己的依赖注入,由 PicoContainer 管理。它允许您将任何组件或服务注入到在相同或更低级别(可能的级别是应用程序、项目和模块)上创建的任何组件、服务或扩展的构造函数中。要使用它,您只需声明相应类型的构造函数参数;您不需要应用任何额外的注释。

您也可以在您的插件中启动您自己的 DI 容器(使用 Spring 或任何其他框架),但是支持核心 IntelliJ IDEA 组件的注入将是您自己的责任。