我正在使用 guice 编写一个应用程序,我想到了一个关于正确初始化 bean 的问题。
目标如下:有一个应该包含从文件中提取的信息的单例配置 bean。
目前我有两个选择:
- 首先是创建一个带有
@Inject
注解的方法init()
,它将读取文件内容并初始化bean - 第二种选择是在 bean 初始化之后将信息放入 bean 中。
问题是在初始化bean时执行耗时操作是否是一个好习惯?
谢谢!
最佳答案
创建一个 factory对于这个 bean 。不要使用 init()
方法。实例化后需要调用的 init()
方法是 code smell 的一种形式.使用Provider给这个bean factory打电话。最后,将 bean 绑定(bind)到提供者并使其成为单例(或 eager singleton )。
应该在急切加载和延迟加载之间取得平衡。我唯一会急于加载某些东西的时间是它花费的时间太长以至于它会显着影响性能。提前加载所有内容会降低开发效率(应用程序需要 5 分钟才能启动是没有效率的。在某些情况下,您需要经常重新启动)。
步骤
- Create Your Bean Factory(构建您的 bean)
- 创建一个调用 Bean Factory 的 Provider(将您的 bean 提供给 guice)
- 在您的模块中,将 bean 的键绑定(bind)到提供者并使其成为单例(或热切单例)。
注意:您可以将您的工厂逻辑直接放在提供程序中,但您的逻辑将绑定(bind)到 guice。
关于java - guice bean 初始化中的长时间操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32808408/