IntelliJ IDEA 插件中的 ApplicationManager.getApplication().putUserData
方法用于存储全局应用级别的用户数据。该数据在整个 IDE 生命周期内有效(不持久化到磁盘),适用于跨插件功能共享临时数据。以下是详细说明及 Demo:
方法说明
-
方法签名
javavoid putUserData(@NotNull Key<T> key, T value)
Key<T>
:需继承自Key
类的自定义键对象,用于唯一标识存储的数据。value
:存储的值,类型需与Key<T>
泛型匹配。
-
特点
- 应用级别共享:数据对所有项目窗口和插件实例可见。
- 临时存储:IDE 重启后数据丢失,需配合持久化组件(如
PersistentStateComponent
)实现长期存储。 - 线程安全:可在多线程环境下直接调用。
Demo 实现
步骤 1:定义 Key 对象
java
import com.intellij.openapi.util.Key;
public class MyKeys {
public static final Key<String> DEMO_KEY = new Key<>("myPlugin.demoData");
}
步骤 2:在 Action 中读写数据
java
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.ui.Messages;
public class MyAction extends AnAction {
@Override
public void actionPerformed(AnActionEvent e) {
// 写入数据
ApplicationManager.getApplication().putUserData(MyKeys.DEMO_KEY, "Hello Plugin!");
// 读取数据
String value = ApplicationManager.getApplication().getUserData(MyKeys.DEMO_KEY);
Messages.showInfoMessage("Stored Value: " + value, "Demo");
}
}
步骤 3:注册 Action 到 plugin.xml
java
<actions>
<action
id="MyPlugin.Action"
class="MyAction"
text="Show User Data"
description="Demo for putUserData">
<add-to-group group-id="ToolsMenu" anchor="first"/>
</action>
</actions>
关键注意点
-
数据生命周期
数据仅在 IDE 运行期间有效,重启后需重新初始化。
-
适用场景
- 跨 Action 或组件传递临时状态(如用户会话令牌)。
- 缓存频繁访问的非持久化数据(如动态配置参数)。
-
替代方案
如需持久化数据,应使用
PersistentStateComponent
或PropertiesComponent
。
验证效果
- 运行插件后,通过菜单 Tools > Show User Data 触发 Action。
- 弹窗将显示存储的值
"Hello Plugin!"
,证明数据已成功读写。