gub*_*bby 3 java dependency-injection guice
这是我的客户:
class Client {
@Inject(optional=true) Service service;
}
Run Code Online (Sandbox Code Playgroud)
有时不需要Service,并且我们在JVM启动时(即在绑定器运行之前)知道该信息.如何使绑定可选?如果我根本没有指定绑定,它会尝试新建服务(并且因为没有零参数构造函数而失败:" 在package.Client.service(Service.java:40)注入时出错:找不到package.Service中的合适构造函数. "),我不能这样做:
binder.bind(Service.class).toInstance(null);
Run Code Online (Sandbox Code Playgroud)
因为Guice似乎不允许空值.有任何想法吗?
你在使用Guice 2.0吗?我已经尝试了这两个Service作为一个接口(服务字段总是null)和它是一个类(null如果它不能创建一个带有JIT绑定的新实例,如果它可以创建一个实例).两者看起来都像你期望的那样.
在这两种情况下,我都没有使用类似的绑定bind(Service.class).toInstance(null).如果这样做,那么您需要确保所有注入点都Service指定它们允许它null.这可以通过使用任何注释@Nullable(您可以自己创建或使用现有注释)来注释注入点来完成:
class Client {
@Inject @Nullable Service service;
}
Run Code Online (Sandbox Code Playgroud)