Eclipse插件开发-首选项存储方案(IPreferenceStore)

本文介绍了Eclipse插件开发中IPreferenceStore的三种实现:ChainedPreferenceStore、PreferenceStore和ScopedPreferenceStore,详细阐述了它们的存储机制和应用场景。ScopedPreferenceStore根据实例和配置范围进行存储,而PreferenceStore基于文件存储。此外,还提及了ChainedPreferenceStore不常用的情况以及如何在Eclipse插件的Activator中应用PreferenceStore进行读取、修改和保存操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IPreferenceStore有三个具体实现,分别是

  • ChainedPreferenceStore 链式存储
  • PreferenceStore 基于文件存储
  • ScopedPreferenceStore 基于范围存储

ScopedPreferenceStore 基于范围存储

  • 实例化
ScopedPreferenceStore preferenceStore = new ScopedPreferenceStore(InstanceScope.INSTANCE, PLUGIN_ID);
  • instance scope按照工作空间或平台的运行实例存储的,每个运行实例所存储的值可能是不一样的,不同实例之间只使用自己的值,无法与其它实例共享。
    存储位置位于运行实例的如下位置:{workspace_path}.metadata.plugins\org.eclipse.core.runtime.settings{qualifier}.prefs
  • configuration scope 各个工作空间将共享它们。例如,如果用户具有平台的单个安装,但是运行几个不同的工作空间,则配置级别范围的首选项将在工作空间之间共享。
    存储位置位于程序安装目录的如下位置:{configuration}.settings{qualifier}.prefs
  • Default scope-表示首选项的缺省值。它们不是由平台更改或存储的。但是,这些值来源于随插件的产品或主要功能部件一起存储的文件。
  • 加载首选项配置
try {
  preferenceStore.load();
} catch (IOException e) {
  logger.error("首选项加载异常", e);
}

PreferenceStore 基于文件存储

  • 实例化
PreferenceStore preferenceStore=new PreferenceStore(storePath);
  • storePath 首选项存储文件路径
  • 加载同ScopedPreferenceStore

ChainedPreferenceStore 不常用,在这不再描述

PreferenceStore在Ecllipse插件Activator中应用的源码

  • Activator类中覆盖默认首选项存储方案
    private PreferenceStore preferenceStore;
    @Override
	public IPreferenceStore getPreferenceStore() {
		// Create the preference store lazily.
		if (preferenceStore == null) {
			// InstanceScope.INSTANCE added in 3.7
			//preferenceStore = new ScopedPreferenceStore(InstanceScope.INSTANCE, PLUGIN_ID);
			String storePath=IDEUtils.getPreferenceStorePath(getBundle().getSymbolicName()+Constants.CONFIG_PREFERENCE_STORE_SUFFIX);
			preferenceStore=new PreferenceStore(storePath);
			initializeDefaultPreferences(preferenceStore);
			try {
				//if(IoTools.)
				preferenceStore.load();
			} catch (IOException e) {
				logger.error("首选项加载异常", e);
			}
		}
		return preferenceStore;
	}

	@Override
	protected void initializeDefaultPreferences(IPreferenceStore store) {
		store.setDefault("plugin.name", "wy2-tool-suite");
		//super.initializeDefaultPreferences(store);
		
	}
	
	@Override
	protected void savePreferenceStore() {
		//super.savePreferenceStore();
		if (preferenceStore != null) {
			try {
				this.preferenceStore.save();
			} catch (IOException e) {
				logger.error("首选项保存异常", e);
			}
		}
	}

  • 读取、修改保存
IPreferenceStore iPreferenceStore =Activator.getDefault().getPreferenceStore();	
iPreferenceStore.setValue("plugin.name", "wy2-tool-suite3");
if(iPreferenceStore.needsSaving()) {
  savePreferenceStore();
}
logger.info("plugin.name: {}",iPreferenceStore.getString("plugin.name"));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值