簡體   English   中英

在Guice中使用注解將一個bean注入另一個bean

[英]Inject one bean into another with annotations in Guice

我是Guice的新手,所以這可能是一個基本問題。 使用模塊中的以下代碼正確創建Guice bean

public class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        ClassA classAObj = ClassA.standard().build();
        bind(ClassA.class).toInstance(classAObj);
        ClassB classBObj = new ClassB(classAObj);
        bind(ClassA.class).toInstance(classBObj);
    }
}

但是我想使用注釋為ClassA和ClassB創建bean。 我在模塊中嘗試了以下代碼:

public class MyModule extends AbstractModule {
    @Provides @Singleton public ClassA getClassA() {
        return ClassA.standard().build();
    }
    @Provides @Singleton public ClassB getClassB() {
        Injector injector = Guice.createInjector(new MyModule());
        return new ClassB(injector.getInstance(ClassA.class));
    }
}

我還嘗試了其他幾種組合,但它們似乎沒有用。 有人可以讓我知道嗎

  1. 在Guice中使用注釋創建ClassB的bean時,如何將ClassA的bean作為構造函數參數注入?

與/或

  1. 如何將ClassA的bean設置為ClassB的類級別變量(不帶構造函數路由)?

您可以簡單地編寫以下內容:

@Provides @Singleton
public ClassB getClassB(ClassA classA) {
  return new ClassB(classA);
}

通過傳遞ClassA作為參數getClassB ,吉斯將考慮ClassB依賴於ClassA ,並會知道,它必須調用getClassA()調用之前getClassB(ClassA)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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