Google Guice:具有 xml 反序列化支持的单例?
在我的项目中,我需要一个包含项目配置的类。 配置必须从 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
重要提示:请注意,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 GuiceNames.bindProperties()
API in one of yourModule
s.Then you can directly inject each single property by using
@Inject @Named
.