gpt4 book ai didi

java - 如何重用 Google Guice 中对象的现有实例?

转载 作者:行者123 更新时间:2023-12-02 09:44:00 25 4
gpt4 key购买 nike

我是 Google Guice 新手。到目前为止,似乎每次创建新的绑定(bind)时,都会创建一个新对象。如果在两个不同的类中有两个相同的对象作为构造函数参数(或字段等),如何重用该对象的第一个实例作为第二个对象的构造函数参数?例如:

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每次注入(inject)时都会提供相同的对象实例。

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);
}
}

关于java - 如何重用 Google Guice 中对象的现有实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56822647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com