我正在使用guice编写一个应用程序,我想到了一个关于正确的bean初始化的问题。
目标如下:有一个单例配置bean,应包含从文件中提取的信息。
目前我有两个选择:
init()
,其中@Inject
注释将读取文件内容并初始化bean 问题是在初始化bean时执行耗时的操作是否是一个好习惯?
谢谢!
答案 0 :(得分:1)
为此bean创建factory。不要使用init()
方法。在实例化后需要调用的init()
方法是code smell的一种形式。使用Provider来调用此bean工厂。最后,将bean绑定到提供程序并使其成为单例(或eager singleton)。
在急切加载的内容与懒惰加载的内容之间取得平衡。我唯一一次急切地加载一些东西,如果它需要很长时间才能显着降低性能。让一切都急切地加载到前面可能会影响开发效率(对于启动5分钟的应用程序来说,它没有效率。在某些情况下,您需要经常重启)。
<强>步骤强>
注意:您可以将工厂逻辑直接放在提供程序中,但是您的逻辑必然会受到攻击。