插件-存储全局应用级别的用户数据 ApplicationManager.getApplication().putUserData

IntelliJ IDEA 插件中的 ApplicationManager.getApplication().putUserData 方法用于存储全局应用级别的用户数据。该数据在整个 IDE 生命周期内有效(不持久化到磁盘),适用于跨插件功能共享临时数据。以下是详细说明及 Demo:


‌方法说明‌

  1. ‌方法签名‌

    java 复制代码
    void putUserData(@NotNull Key<T> key, T value)
    • Key<T>:需继承自 Key 类的自定义键对象,用于唯一标识存储的数据。
    • value:存储的值,类型需与 Key<T> 泛型匹配。
  2. ‌特点‌

    • 应用级别共享:数据对所有项目窗口和插件实例可见‌。
    • 临时存储: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>

‌关键注意点‌

  1. ‌数据生命周期 ‌

    数据仅在 IDE 运行期间有效,重启后需重新初始化‌。

  2. ‌适用场景‌

    • 跨 Action 或组件传递临时状态(如用户会话令牌)。
    • 缓存频繁访问的非持久化数据(如动态配置参数)‌。
  3. ‌替代方案 ‌

    如需持久化数据,应使用 PersistentStateComponent 或 PropertiesComponent‌。


‌验证效果‌

  1. 运行插件后,通过菜单 ‌Tools > Show User Data‌ 触发 Action。
  2. 弹窗将显示存储的值 "Hello Plugin!",证明数据已成功读写‌。
相关推荐
霸道流氓气质几秒前
MinIO 入门与实战:S3 兼容对象存储、Spring Boot 集成与 AI 应用文件管理
人工智能·spring boot·后端
我真是泰库辣几秒前
我写了 300 行 Python,让代码替我在《三角洲行动》里吹口琴
后端
CaptainT2 分钟前
先把例子跑起来:MySQL 环境与本文的示例数据
数据库·后端·mysql
程序猿乐锅2 分钟前
【从0-1学习Python | 第四篇】Python 字符串和元组
java·开发语言·笔记·后端·python·学习
码事漫谈15 分钟前
一条 ALTER TABLE 的跨库旅程:KFS 如何自动翻译 DDL
后端
Rain的Java大神之路28 分钟前
10 万人抢 2000 个座位,电影票选座系统怎么防超卖?一文讲透大厂高频场景题
java·后端·面试
武子康31 分钟前
用户说“算了”,设备指令真的取消了吗?
人工智能·后端·agent
威哥爱编程37 分钟前
【AI全栈12-07】Spring Boot 用 Agent 自动完成多步运营任务
java·spring boot·后端
未秃头的程序猿40 分钟前
我用 Spring AI + MCP 把公司内部系统接给了 AI,过程没想象中顺利
java·后端
geovindu1 小时前
rust: Chain of Responsibility Pattern (续)
开发语言·后端·设计模式·rust·责任链模式·行为模式