在Google Guice中:
我们可以实现一个带注释@Singleton
的单例类,它不会实现一个接口
并尝试使用注释@Inject
将其注入任何其他类?
此外,我还没有在AbstractModule
的扩展类中为该类配置任何绑定。
是否有必要从接口实现类,我想知道绑定,如果我从接口实现单例类,然后它需要绑定,因为可能有多个类实现接口。
但是如果我有一个不实现接口的类,那么它是否需要在实现AbstractModule的类中绑定?
答案 0 :(得分:1)
是的,您可以使用@Singleton
等范围注释标记实现类并直接注入。
不需要在AbstractModule中绑定该类,但出于多种原因,您可能希望使用Untargeted Binding进行绑定:
当Injector启动时,Guice会急切地加载类并准备其依赖项,这可能会在运行时产生更可预测的性能。这对于服务器尤其有用,Guice应用程序可以在这些服务器上预热"在接收实时流量之前。
如果缺少任何依赖项,Guice将知道缺少依赖项并在注入器创建时失败。如果没有bind
语句,Guice可能只会在尝试实现它时遇到您的类,这意味着您的应用程序可能会运行一段时间,然后Guice会抛出有关缺少的依赖项的异常。
您可以选择限制注入哪些类,以减少项目开发人员无意中向图表添加不适当绑定的可能性。您可以致电requireExplicitBindings
启用该检查,此时您需要bind
声明。