簡體   English   中英

Guice-相同返回類型的多個提供程序方法

[英]Guice - Multiple provider methods for same return types

在我的模塊中:

@Provides
@Singleton
public ExecutorService provideExecutorService(){
    return new ExecutorService(config);
}

在我的課上:

@Inject
private ExecutorService executorService;

現在,我需要兩個具有不同配置的ExecutorService實例:

@Provides
@Singleton
public ExecutorService provideExecutorServiceA(){
    return new ExecutorService(configA);
}

@Provides
@Singleton
public ExecutorService provideExecutorServiceB(){
    return new ExecutorService(configB);
}

如果我想為班上用configB創建的ExecutorService注入ExecutorService,我該怎么做?

您可以使用綁定注釋

@Provides
@Singleton
@Priority(Priority.Level.HIGH)
public static ReportingDal createHighPriorityReportingDal(DataSource dataSource,
                                                          DatabaseType databaseType,
                                                          ReportingQueryGenerator queryGenerator)
{
    return new ReportingDalImpl(dataSource, databaseType, Queue.DEFAULT, queryGenerator);
}

@Provides
@Singleton
@Priority(Priority.Level.LOW)
public static ReportingDal createLowPriorityReportingDal(DataSource dataSource,
                                                         DatabaseType databaseType,
                                                         ReportingQueryGenerator queryGenerator)
{
    return new ReportingDalImpl(dataSource, databaseType, Queue.MAINTENANCE, queryGenerator);
}

@Priority批注如下所示:

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
@BindingAnnotation
public @interface Priority
{
    Level value();

    public enum Level
    {
        LOW,
        HIGH
    }
}

請注意,如果您不想實現自定義注釋,則可以使用內置Guice的@Named注釋 然后,您可以像下面這樣在類中使用它:

@Inject
public ReportingJob(@Priority(Priority.Level.LOW) ReportingDal dal)
{
    this.dal = dal;
}

編輯

或者,如果您通過私有字段進行注入:

@Inject
@Priority(Priority.Level.LOW)
private ReportingDal dal;

暫無
暫無

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

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