Google Guice:具有 xml 反序列化支持的单例?

发布于 2024-12-05 03:10:02 字数 114 浏览 1 评论 0原文

在我的项目中,我需要一个包含项目配置的类。 配置必须从 XML 文件加载,并且必须是单例。

在 Guice 中有一个单例作用域。现在我必须用反序列化的配置“覆盖”单例。

这有可能吗?

in my project I need a class which contains the project configuration.
The configuration must be loaded from a XML file and must be a singleton.

In Guice there is a singleton scope. Now I have to "overwrite" the singleton with the deserialized configuration.

Is this somehow possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

(り薆情海 2024-12-12 03:10:02

重要提示:请注意,Guice 最初创建的目的是为了摆脱另一个 DI 库用于管理依赖项的所有这些巨大且丑陋的 XML 文件。一般来说,使用 Guice 时,您应该能够几乎完全从项目中删除任何 XML。

但是,如果您必须这样做,可能是因为 XML 文件是由您无法控制的某些东西生成的,那么请考虑以下事项:

保留整个配置对象并为其创建一个 Provider,并将其绑定在 Singleton 范围中。但您必须自己执行反序列化。

或者,如果您的配置只是由(名称,值)对组成,那么您可以使用 java.util.Properties ,它可以从 XML 文件加载,然后使用 Guice Names.bindProperties( ) API 在您的模块之一中。

然后,您可以使用@Inject @Named直接注入每个属性。

Important: pelase do note that Guice was originally created to get rid of all these huge and ugly XML files used by another DI library for managing dependencies. In general, when using Guice, you should be able to -almost- completely remove any XML from your project.

But if you must, perhaps because the XML file is generated by something outside your control then consider these:

Keep your whole configuration object and create a Provider for it, and bind it in Singleton scope. But you'll have to perform deserialization by yourself.

Or if your configuration is simply made of (name, value) pairs, then you can use java.util.Properties whcih can be loaded from an XML file, then use Guice Names.bindProperties() API in one of your Modules.

Then you can directly inject each single property by using @Inject @Named.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文