[英]How do I reuse an existing instance of an object in Google Guice?
我是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);
}
}
在此示例中,我認為通過Guice使用MyClassC的新實例調用MyClassA的構造函數,並且使用MyClassC的新實例也調用MyClassB的構造函數。 我將如何首先使用MyClassC的新實例調用MyClassA的構造函數,然后如何使用帶有Guice的MyClassC的相同實例調用MyClassB的構造函數?
正如@ 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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.