假设我们有两个 osgi 包:bundleA 和bundleB。在bundleB中,我们有一些texts.properties
。所以,在bundleA中我们这样做
ResourceBundle rb=
ResourceBundle.getBundle("com/foo/texts",locale, classFromBundleB.getClassLoader());
现在,我们更新 BunldeB 或完全删除它,然后安装并启动新版本的 BundleB,其中包含新版本的 texts.properties
。还有两个问题:
- 现有的“rb”会怎样?它必须有效吗?
- 如果在新版本的bundleB出现后我们执行与上面相同的代码 - 我们会在
rb
中看到新版本的texts.properties
吗?或者我们需要为此采取额外的行动?
最佳答案
由于bundleA有对classFromBundleB的引用,除非bundleA被刷新,否则它将继续维护原始bundleB的classFromBundleB。由于 ResourceBundle 维护缓存,因此您将不断获得相同的 rb。因此,更新bundleB后,您需要刷新依赖于bundleB中的类的bundle。
关于java - Osgi Bundle 更新和 ResourceBundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45544120/