我们可以直接向guice@inject注入一个类(不实现接口)吗?



在谷歌Guice中: 我们可以实现一个带有注释的单例类吗@Singleton它不实现接口 并尝试使用注释@Inject将其注入任何其他类中? 此外,我还没有在扩展的AbstractModule类中为该类配置任何绑定。 是否有必要从接口实现该类,并且我还想知道绑定,如果我从接口实现单例类,则需要绑定,因为可能有多个类实现该接口。

但是如果我有一个不实现接口的类,那么是否需要绑定到实现抽象模块的类中?

是的,您可以使用范围注释(如@Singleton)标记实现类并直接注入它。

在AbstractModule 中不需要绑定该类,但您可能希望使用非目标绑定来执行此操作,原因如下:

  • Guice 将急切地加载类并在注入器启动时准备其依赖项,这可能会在运行时产生更可预测的性能。这对于服务器特别有用,Guice 应用程序可能会在接收实时流量之前"预热"。

  • Guice 将知道缺少依赖项,如果缺少任何依赖项,则会在注入器创建时失败。如果没有bind语句,Guice 可能只会在尝试实现您的类时遇到它,这意味着您的应用程序可能会运行一段时间,然后 Guice 才能抛出有关缺少依赖项的异常。

  • 您可以选择限制可以注入的类,以减少项目开发人员无意中向图形添加不适当的绑定的可能性。您可以通过调用requireExplicitBindings来启用该检查,此时您将需要一个bind语句。

相关内容

最新更新