guice bean 初始化中的长时间操作
Long operations in guice bean initialization
我正在使用 guice 编写一个应用程序,我想到了一个关于正确初始化 bean 的问题。
目标如下:有一个应该包含从文件中提取的信息的单例配置 bean。
目前我有两个选择:
- 首先是创建一个带有
@Inject
注释的方法 init()
,它将读取文件内容并初始化 bean
- 第二个选项是将信息放入 bean 中在 bean 初始化后。
问题是在初始化bean时执行耗时操作是否是一个好习惯?
谢谢!
创建 factory for this bean. Don't use an init()
method. Having an init()
method that needs to be called after it's instantiated is a form of code smell. Use a Provider to call this bean factory. And finally, bind the bean to the provider and make it a singleton (or an eager singleton).
急切加载和延迟加载之间存在平衡。我唯一会急于加载某些东西的时间是它花费的时间太长以至于它会显着影响性能。提前加载所有内容会降低开发效率(应用程序需要 5 分钟才能启动是没有效率的。在某些情况下,您需要经常重新启动)。
步骤
- Create Your Bean Factory(构造你的 bean)
- 创建一个调用 Bean Factory 的 Provider(提供你的 bean 给 guice)
- 在您的模块中,将 bean 的键绑定到提供者并使其成为单例(或热切单例)。
注意:您可以将您的工厂逻辑直接放在提供程序中,但是您的逻辑将绑定到 guice。
我正在使用 guice 编写一个应用程序,我想到了一个关于正确初始化 bean 的问题。
目标如下:有一个应该包含从文件中提取的信息的单例配置 bean。
目前我有两个选择:
- 首先是创建一个带有
@Inject
注释的方法init()
,它将读取文件内容并初始化 bean - 第二个选项是将信息放入 bean 中在 bean 初始化后。
问题是在初始化bean时执行耗时操作是否是一个好习惯?
谢谢!
创建 factory for this bean. Don't use an init()
method. Having an init()
method that needs to be called after it's instantiated is a form of code smell. Use a Provider to call this bean factory. And finally, bind the bean to the provider and make it a singleton (or an eager singleton).
急切加载和延迟加载之间存在平衡。我唯一会急于加载某些东西的时间是它花费的时间太长以至于它会显着影响性能。提前加载所有内容会降低开发效率(应用程序需要 5 分钟才能启动是没有效率的。在某些情况下,您需要经常重新启动)。
步骤
- Create Your Bean Factory(构造你的 bean)
- 创建一个调用 Bean Factory 的 Provider(提供你的 bean 给 guice)
- 在您的模块中,将 bean 的键绑定到提供者并使其成为单例(或热切单例)。
注意:您可以将您的工厂逻辑直接放在提供程序中,但是您的逻辑将绑定到 guice。