我有一个类,我需要注入一个变量,但构造函数不是注入的。
public class Foo{
private boolean x;
public Foo(){
//sets some variables
}
@Inject
public void setX(boolean x){
this.x=x;
}
}
x的值没有被注入。是否有必要在构造函数中使用注入来识别方法注入? 我是否需要从其他类中调用此方法才能使其正常工作? Thanx提前
答案 0 :(得分:4)
如果您要将Guice用于@Inject
Foo
,那么Guice需要创建对象 - 来自注入器或来自单独类中的另一个@Inject
点。 Guice无法帮助您注入它没有创建的对象。
在这种情况下,没有必要将@Inject
添加到构造函数中,因为Guice可以自动注入无参数构造函数。例如:
public class MethodInjectionTest {
static class Foo {
private boolean x;
public Foo(){
//sets some variables
}
@Inject
public void setX(boolean x){
this.x=x;
}
}
Injector i = Guice.createInjector(new AbstractModule() {
protected void configure() {
bind(Boolean.class).toInstance(Boolean.TRUE);
}
});
@Test
public void methodInjection() {
Foo foo = i.getInstance(Foo.class);
assertThat(foo.x, is(true));
}
// EDIT: An example based on the comment by @JeffBowman
@Test
public void memberInjection() {
Foo foo = new Foo();
i.injectMembers(foo);
assertThat(foo.x, is(true));
}
}
如果您的真实世界类需要在构建期间将Guice控制的依赖项与客户端提供的依赖项混合,请查看assisted inject