这是我的客户:
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/