3

我对 Guice 比较陌生,所以这可能是基本问题。看起来 Guice 可以选择要求显式绑定。要求显式绑定有什么明显的优势吗?有没有人在实践中经常使用这个选项?

4

3 回答 3

6

我们在实践中使用此选项。我们只使用 Guice 将我们的应用程序连接在一起,而不是用于任何类型的每个请求的对象构造。结果,我们的大多数绑定都在单例范围内——例如,我们希望我们的业务逻辑和统计接口都在同一个持久层对象上工作。

在没有显式绑定的情况下,Guice 将尝试使用 JIT 绑定来满足注入点。此绑定将在“无范围”范围内完成,它为每个注入点提供一个新的对象实例。这几乎不是我们想要的,并且会导致奇怪的运行时错误。强制显式绑定迫使人们思考和列举每个绑定的范围。

于 2013-03-07T21:36:47.603 回答
2

我最近参加了一个 1 小时的调试会议,因为我们没有使用这个配置。问题是,当我默认需要一个单例时,创建了多个实例。强制显式绑定是一个很好的提醒,要考虑它是否应该是单例。

于 2014-08-18T14:34:20.067 回答
0

我也花了几个小时调试。原因是我忘记将具体类的绑定添加到单例范围。为了始终具有显式绑定,我使用了如何防止 Guice 注入未在模块中绑定的类的一个答案?(不是当前选择的):(binder().requireExplicitBindings();在 AbstractModule 的 configure 方法中)。

于 2015-02-25T12:39:13.447 回答