我对Guice比较新,所以这可能是个基本问题。看起来Guice可以选择require explicit bindings。要求显式绑定有明显的优势吗?有人经常在实践中使用这个选项吗?
答案 0 :(得分:4)
我们在实践中使用此选项。我们仅使用Guice将应用程序连接在一起,而不是用于任何类型的每请求对象构造。因此,我们的大多数绑定都在Singleton范围内 - 例如,我们希望我们的业务逻辑和统计接口能够处理相同的持久层对象。
如果没有明确的绑定,Guice将尝试使用JIT绑定来满足注入点。此绑定将在“无范围”范围内完成,该范围为每个注入点提供新的对象实例。这几乎不是我们想要的,并导致奇怪的运行时错误。强制显式绑定迫使人们思考并枚举每个绑定的范围。
答案 1 :(得分:2)
我最近经历了1小时的调试会话,因为我们没有使用此配置。问题是当我预期默认单身时会创建多个实例。强制显式绑定是一个很好的提醒,可以考虑它是否应该是单例。
答案 2 :(得分:0)
我也花了几个小时进行调试。原因是我忘了将具体类的绑定添加到单例范围。为了始终具有显式绑定,我使用了How do you prevent Guice from injecting a class not bound in the Module?中的一个答案(不是当前选择的答案):binder().requireExplicitBindings();
(在AbstractModule的configure方法中)。