java - guice bean 初始化中的长时间操作

标签 java inversion-of-control guice ioc-container

我正在使用 guice 编写一个应用程序,我想到了一个关于正确初始化 bean 的问题。

目标如下:有一个应该包含从文件中提取的信息的单例配置 bean

目前我有两个选择:

  1. 首先是创建一个带有@Inject注解的方法init(),它将读取文件内容并初始化bean
  2. 第二种选择是在 bean 初始化之后将信息放入 bean 中。

问题是在初始化bean时执行耗时操作是否是一个好习惯?

谢谢!

最佳答案

创建一个 factory对于这个 bean 。不要使用 init() 方法。实例化后需要调用的 init() 方法是 code smell 的一种形式.使用Provider给这个bean factory打电话。最后,将 bean 绑定(bind)到提供者并使其成为单例(或 eager singleton )。

应该在急切加载和延迟加载之间取得平衡。我唯一会急于加载某些东西的时间是它花费的时间太长以至于它会显着影响性能。提前加载所有内容会降低开发效率(应用程序需要 5 分钟才能启动是没有效率的。在某些情况下,您需要经常重新启动)。

步骤

  1. Create Your Bean Factory(构建您的 bean)
  2. 创建一个调用 Bean Factory 的 Provider(将您的 bean 提供给 guice)
  3. 在您的模块中,将 bean 的键绑定(bind)到提供者并使其成为单例(或热切单例)。

注意:您可以将您的工厂逻辑直接放在提供程序中,但您的逻辑将绑定(bind)到 guice。

关于java - guice bean 初始化中的长时间操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32808408/

相关文章:

java - 我可以使用 Guice 在方法中获取实例吗?

java - 使用 Guice @Inject 时未初始化 @FindBy WebElements

java - 将文件从 SD 卡 move 到应用程序内部数据(存储)

java - 整数是否应该包含在 strings.xml 文件中?

java - Kubernetes Ingress 应该与 Spring Cloud Gateway 共存吗?

asp.net-mvc - IoC CaSTLe Windsor - 没有为此对象定义无参数构造函数

c# - ASP.Net Core 使用什么依赖注入(inject)框架?

java - 如何使用 selenium webdriver java 从城市字段的 GoIbibo 中的自动选择下拉列表中选择元素

laravel - 在 Laravel 中使用 Facade 和 IoC 有什么意义

java - jar 和源中的命名注释失败