gpt4 book ai didi

java - Guice - 相同返回类型的多个提供者方法

转载 作者:行者123 更新时间:2023-11-30 06:13:45 25 4
gpt4 key购买 nike

在我的模块中:

@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 注入(inject) ExecutorService,我该怎么做?

最佳答案

您可以使用 binding annotations :

@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
}
}

请注意,如果您不想实现自定义注释,您可以使用 @Named annotation那是内置的 Guice。然后你可以像这样在你的类中使用它:

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

编辑

或者,如果您通过私有(private)字段注入(inject):

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

关于java - Guice - 相同返回类型的多个提供者方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31460601/

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