java - 如何在 Guice 中进行可选绑定(bind)?

标签 java dependency-injection guice

这是我的客户:

class Client {
    @Inject(optional=true) Service service;
}

有时不需要该服务,而我们在 JVM 启动时(即运行联编程序之前)知道该信息。 如何使绑定(bind)可选?如果我根本不指定绑定(bind),它会尝试新建服务(并且失败,因为没有零参数构造函数:“在 package.Client.service(Service.java:40) 注入(inject)时出错:可能在 package.Service 中找不到合适的构造函数。"),我做不到:

binder.bind(Service.class).toInstance(null);

因为 Guice 似乎不允许空值。有什么想法吗?

最佳答案

您使用的是 Guice 2.0 吗?我已经尝试过将 Service 作为接口(interface)(服务字段始终为 null)并将其作为类(null 如果可以的话) ' 创建一个带有 JIT 绑定(bind)的新实例,如果可以的话,创建一个实例)。两者看起来都符合您的预期。

在这两种情况下,我都没有使用像 bind(Service.class).toInstance(null) 这样的绑定(bind)。如果这样做,则需要确保 Service 的所有注入(inject)点指定它们允许它为 null。这可以通过使用任何名为 @Nullable 的注解来注解注入(inject)点来完成(您可以创建自己的注解或使用现有的注解):

class Client {
    @Inject @Nullable Service service;
}

关于java - 如何在 Guice 中进行可选绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3112853/

相关文章:

dependency-injection - Aurelia & Typescript 注入(inject)和继承

java - 如何在 gradle 依赖项的依赖项中指定分类器?

java - 谷歌应用程序引擎跨模块 session (java,guice)

java - JaxB:不适用于带有大写字母的 XML 子标签

java - 如何使 JTable 中只有一列不可编辑

java - 简单的 Dagger 单元测试失败

java - 使用 Spring 自注入(inject)

Java dateFishion 编码

java - 在 Windows 7 上 : Same path but Explorer & Java see different files than Powershell

java - 将泛型抽象父类(super class)绑定(bind)到多个非泛型实现类