我是Google Guice的新手。到目前为止,似乎每次创建新绑定时都会创建一个新对象。如果在两个不同的类中有两个相同的对象作为构造函数参数(或字段等),则如何重用该对象的第一个实例作为第二个对象的构造函数参数?例如:
public interface MyInterfaceA{
//Method declarations
}
public class MyClassA implements MyInterfaceA{
private MyInterfaceC myField;
@Inject
public MyClassA(MyInterfaceC myField){
this.myField = myField;
}
//Methods, etc.
}
public interface MyInterfaceB{
//Method declarations
}
public class MyClassB implements MyInterfaceB{
private MyInterfaceC myField;
@Inject
public MyClassB(MyInterfaceC myField){
this.myField = myField;
}
//Methods, etc.
}
public interface MyInterfaceC{
//Method declarations
}
public class MyClassC implements MyInterfaceC{
@Inject
public MyClassC(){
//Implementation
}
//Methods, etc.
}
public class MyModule extends AbstractModule{
@Override
protected void configure(){
bind(MyInterfaceA.class).to(MyClassA.class);
bind(MyInterfaceB.class).to(MyClassB.class);
bind(MyInterfaceC.class).to(MyClassC.class);
}
}
在此示例中,我认为MyGuest的构造函数是通过带有新MyClassC实例的Guice来调用的,而MyClassB的构造函数也是通过MyClassC的新实例来调用的。我该如何首先使用MyClassC的新实例来调用MyClassA的构造函数,然后再使用带有Guice的MyClassC的相同实例来调用MyClassB的构造函数?
答案 0 :(得分:1)
由于@ njzk2已经对此进行了评论,我只是在下面添加代码。每次注入MyClassC时,都会为它提供相同的对象实例。
public class MyModule extends AbstractModule{
@Override
protected void configure(){
bind(MyInterfaceA.class).to(MyClassA.class);
bind(MyInterfaceB.class).to(MyClassB.class);
bind(MyInterfaceC.class).to(MyClassC.class).in(Singleton.class);
}
}