如何在 Google Guice 中重用对象的现有实例?
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);
}
}
在这个例子中,我认为 MyClassA 的构造函数是通过 Guice 使用 MyClassC 的新实例调用的,而 MyClassB 的构造函数也是使用 MyClassC 的新实例调用的。我如何首先使用 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);
}
}
我是 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);
}
}
在这个例子中,我认为 MyClassA 的构造函数是通过 Guice 使用 MyClassC 的新实例调用的,而 MyClassB 的构造函数也是使用 MyClassC 的新实例调用的。我如何首先使用 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);
}
}