簡體   English   中英

如何重用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);
    }
}

在此示例中,我認為通過Guice使用MyClassC的新實例調用MyClassA的構造函數,並且使用MyClassC的新實例也調用MyClassB的構造函數。 我將如何首先使用MyClassC的新實例調用MyClassA的構造函數,然后如何使用帶有Guice的MyClassC的相同實例調用MyClassB的構造函數?

正如@ n​​jzk2所評論的那樣,我只是在下面添加代碼。 在這里,每次注入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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM