簡體   English   中英

使用guice創建類的多個實例

[英]Create multiple instances of class using guice

有一個類擁有一些狀態並實現了一個接口。 此類應在具有不同配置的GUICE模塊中多次注冊。 該類具有對其他bean的依賴關系,應由GUICE注入。 例:

public class MenuItemImpl implements MenuItem {
  @Inject
  AnyService service;

  public MenuItemImpl(String caption) {
    this.caption = caption;
  }
 //...
}

代替使用c'tor參數,也可以使用公共設置器。

在Guice模塊中,我想綁定MenuItemImpl類的多個實例。

我嘗試使用Provider<T> ,但是在這種情況下不會注入依賴的bean。

Multibinder<MenuItem> binder = Multibinder.newSetBinder(binder(), MenuItem.class);
binder.addBinding().toProvider( new Provider<MenuItem>() {
  @Override
  public MenuItem get() {
      return new MenuItemImpl("StartCaption");
  }
}

我看了@Assist注釋。 但是,我想在模塊的綁定階段而不是在使用bean時指定配置。

我看到的唯一解決方法是為每個配置創建不同的子類,這是糟糕的風格,不是OO的初衷。

public class A
{
    @Inject
    @Named("startCaption")
    private MenuItem menuItem;

}

public class B
{
    @Inject
    @Named("endCaption")
    private MenuItem menuItem;

}

和在Guice模塊中

    String[] captions = { "startCaption", "endCaption" };

    for(final String caption : captions)
    {
        bind(MenuItem.class).annotatedWith(Names.named(caption)).toProvider(
        new Provider<MenuItem>()
        {
            public MenuItem get()
            {
                return new MenuItemImpl(caption);
            }

        });
    }

暫無
暫無

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

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