当前位置: 首页 > 知识库问答 >
问题:

我们可以直接用Guice@inject注入一个类(它没有实现接口)吗

翟冯浩
2023-03-14

在Google Guice中:我们可以实现一个带有注释@singleton的单例类,它不实现接口,并且尝试使用注释@inject将它注入到任何其他类中吗?此外,我还没有在abstractModule的扩展类中为该类配置任何绑定。有必要从接口实现类吗?我还想了解绑定的情况,如果我从接口实现单例类,那么它需要绑定,因为可能有多个类实现接口。

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

共有1个答案

孟修竹
2023-03-14

是的,您可以用类似@singleton的作用域注释标记一个实现类,并直接注入它。

不需要在AbstractModule中绑定该类,但您可能希望通过非目标绑定来这样做,原因有很多:

>

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

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

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

  •  类似资料:
    • 问题内容: 我读过我们只能通过继承抽象类来实例化它,但是我们不能直接实例化它。 但是,我看到我们可以通过调用另一个类的方法来创建具有抽象类类型的对象。 例如- 是一个抽象类,我们可以通过在该类中调用function 来实例化它: 抽象类如何在这里实例化? 问题答案: 您不能直接实例化一个抽象类,但是可以在没有具体类的情况下创建一个匿名类: 这也适用于接口。

    • 看来Guice正在尝试使用不同于预期的创建方法。你知道怎么解决这个问题吗?如有任何指示,将不胜感激! 谢谢!

    • 问题内容: 我想知道我们可以在一个接口内定义一个接口。喜欢 这是面试中提出的问题。任何实时使用。 问题答案: 是的,我们可以做到。Java中的嵌套接口的定义如下: 嵌套接口是其声明出现在另一个类或接口的主体内的任何接口。顶级接口是不是嵌套接口的接口。 请参阅此为多。 进一步 … 一个原因可能是外部接口具有一种将回调实现作为参数的方法。在这种情况下,嵌套接口是回调方法必须实现的协定。我没有理由在顶层

    • 我们必须与开发合作伙伴共享我们的代码库,但我们不想透露某些服务的实现。 假设我们有一个接口FooService及其实现。 许多其他类自动将此服务连接进来并调用doThings()。例如: 如果我只是删除,当然会在启动时抛出。如果我在FooService自动安装的任何地方都使用,则每当调用时,都会在运行时抛出。 除了手动删除FooServiceImpl中的每个方法体之外,还有其他解决方法吗? 非常感

    • 我有一个Maven项目,它使用另一个项目作为jar库。我从jar中获得了@Inject'ed UserService接口,我得到: com.google.inject.ConfigurationException: Guice配置错误:1)没有绑定UserService的实现。 我曾尝试将UserService接口绑定到具体的类,但后来我得到了注入UserService的类的“没有实现…被绑定”异

    • 问题内容: 一个类文件可以实现几个接口?类文件使用的接口数量是否有限制?提前致谢。 问题答案: 出于所有实际目的,一个类可以实现的接口数量没有限制,但是java不允许您从多个超类继承。 但是,如果您确实想要nitpick,则可以说一个类可以实现的接口数量受接口ID可以以java字节码表示的最大值限制,或者必须由实现这些接口的代码存储量来限制,或者存储字节码的硬盘空间量。这些都是愚蠢的论点。显然,由