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

问题描述 投票:0回答:1

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

但是如果我有一个没有实现接口的类,那么是否需要在实现AbstractModule的类中绑定?

java guice
1个回答
1
投票

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

不需要在AbstractModule中绑定该类,但您可能希望使用Untargeted Binding这样做,原因如下:

  • 当Injector启动时,Guice会急切地加载类并准备其依赖项,这可能会在运行时产生更可预测的性能。这对于服务器尤其有用,其中Guice应用程序可能在接收实时流量之前“预热”。
  • 如果缺少任何依赖项,Guice将知道缺少依赖项并在注入器创建时失败。如果没有bind语句,Guice可能只会在尝试实现它时遇到您的类,这意味着您的应用程序可能会运行一段时间,然后Guice可以抛出有关缺少的依赖项的异常。
  • 您可以选择限制可以注入哪些类,以减少项目开发人员无意中向图表添加不适当绑定的可能性。您可以通过调用requireExplicitBindings启用该检查,此时您将需要一个bind语句。
© www.soinside.com 2019 - 2024. All rights reserved.