如何管理Java库的内部配置设置?

时间:2011-10-14 12:54:54

标签: java configuration

我正在开发一个可以在Android,Web和桌面应用程序中使用的Java库。该库由几个主要分离的模块组成,这些模块共享通用配置设置(例如“启用”,“api密钥”)。

目标

配置应允许在运行时更改(例如Android中的API,JMX或SharedPreferemes),而不会影响可移植性(例如,无数据库),可测试性或线程安全性(某些模块在一个单独的线程中运行。)

方法

我目前使用的是配置对象,我在启动时创建并传递给各个模块(它们自己将它传递给子类)。然后每个类将所需的字段复制到本地字段 - 唯一的问题:在运行时无法更改设置。

其他想法:

  • 使用 static :难以测试
  • 引用传递给模块:thread-safe?

这里最好的解决方案/最佳做法是什么?


更新:为了清楚起见,模块不需要知道是否对配置进行了更改,它应该直接使用字段的新值并从此开始使用它。

1 个答案:

答案 0 :(得分:1)

一些建议:

  • 不要将每个类所需的字段复制到本地字段;始终从配置对象访问属性(任何缓存管理应该在配置对象上完成)
  • 确保使用配置对象的所有类都不会以任何方式直接修改 (通过插入,删除键或更改其值)
  • 在实例化时预加载config-object中所需的所有信息
  • 使配置对象成为Singleton,并在所需客户端之间共享
  • 为配置对象提供一种机制,以驱逐任何不再有效的缓存条目
  • 使用观察者模式使缓存保持最新