java:Preferences API与Apache Commons配置

时间:2010-02-23 20:39:33

标签: java configuration apache-commons

我需要允许用户存储/加载任意数量的对象列表(假设它们是Serializable)。从概念上讲,我想要一个像

这样的数据模型
class FooBean { /* bean stuff here */ }

class FooList {
    final private Set<FooBean> items = new HashSet<FooBean>();

    public boolean add(FooBean item) { return items.add(item); }
    public boolean remove(FooBean item) { return items.remove(item); }
    public Collection<FooBean> getItems() { 
       return Collections.unmodifiableSet(items); 
    }
}

class FooStore {
    public FooStore() {
       /* something... uses Preferences or Commons Configuration */ 
    }
    public FooList load(String key) {
       /* something... retrieves a FooList associated with the key */ 
    }
    public void store(String key, FooList items) { 
       /* something... saves a FooList under the given key */
    }
}

我应该使用Preferences API还是Commons Config?每个人的优势是什么?

4 个答案:

答案 0 :(得分:6)

嗯,commons-configuration和许多apache项目一样,是一个抽象层,允许一个人无限地使用首选项,一个ldap存储,属性文件等等。 因此,您的问题可以按原样重写:您是否需要更改用于存储首选项的格式?如果不是,那么java偏好是可行的方法。在其他地方,考虑公共配置的可移植性。

答案 1 :(得分:2)

考虑到存储与键相关联的一组值的示例,在使用每个库时,您似乎有以下选项

  • 首选项 - 存储为与密钥相关联的字节数组
  • Commons Configuration - 存储为与密钥相关联的字符串列表

所以选择可以归结为将FooBean转换为字节数组还是字符串更容易。

Commons Configuration的另一个优点是不同的后端。我用它来存储数据库中的属性。如果您想将对象存储在用户本地计算机以外的其他位置,那么它将是更好的选择。

答案 2 :(得分:1)

我通常会使用Preferences API,它是JDK的一部分,除非有问题可以通过commons-config解决。

就个人而言,当我使用spring时,它有一个属性配置器,它可以为我完成大部分操作。

答案 3 :(得分:1)

Commons Configuration不适合存储复杂的对象结构。你最好使用序列化框架。