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

标签 java configuration

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

目标

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

方法

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

其他想法:

  • 使用静态:难以测试
  • 引用传递给模块:线程安全?

这里的最佳解决方案/最佳实践是什么?

<小时/>

更新:需要明确的是,模块不需要知道配置是否发生了更改,它应该简单地直接使用该字段的新值并从那时起使用它。

最佳答案

一些建议:

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

关于java - 如何管理 Java 库的内部配置设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7767909/

相关文章:

configuration - log4j appender 阈值和类别

java - Guice 和一般应用程序配置

php - 将 XML 用于 PHP 配置时的最佳实践?

java - Boids 中的矩形避免

java - android timer 动画挂断后不久

Java EE 登录页面问题

java - 我没有收到使用此代码的电子邮件。问题是什么?

mysql - 在哪里可以找到文件 my.cnf 或 my.ini 文件?

configuration - 从主目录隐藏 Octave 工作区文件

java - Guava ImmutableList...到底是什么支持它?