在guice bean初始化中的长操作

时间:2015-09-27 13:28:40

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

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

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

目前我有两个选择:

  1. 首先创建一个方法init(),其中@Inject注释将读取文件内容并初始化bean
  2. 第二个选项是在初始化bean之后将信息放在bean 中。
  3. 问题是在初始化bean时执行耗时的操作是否是一个好习惯?

    谢谢!

1 个答案:

答案 0 :(得分:1)

为此bean创建factory。不要使用init()方法。在实例化后需要调用的init()方法是code smell的一种形式。使用Provider来调用此bean工厂。最后,将bean绑定到提供程序并使其成为单例(或eager singleton)。

在急切加载的内容与懒惰加载的内容之间取得平衡。我唯一一次急切地加载一些东西,如果它需要很长时间才能显着降低性能。让一切都急切地加载到前面可能会影响开发效率(对于启动5分钟的应用程序来说,它没有效率。在某些情况下,您需要经常重启)。

<强>步骤

  1. 创建Bean Factory(构造您的bean)
  2. 创建一个调用Bean Factory的提供程序(将bean提供给guice)
  3. 在您的模块中,将bean的密钥绑定到提供程序并使其成为单例(或急切的单例)。
  4. 注意:您可以将工厂逻辑直接放在提供程序中,但是您的逻辑必然会受到攻击。