首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用guice注入器使用注释“guice”?

如何使用guice注入器使用注释“guice”?
EN

Stack Overflow用户
提问于 2015-02-16 20:49:42
回答 1查看 593关注 0票数 0

我使用的是一个FileHandler类,它将File作为ctor参数。

我想和两个不同的File一起使用它。

如何配置注射器每次注入不同的File

getInstance一样,它会返回所需的具体实例吗?

注释在这里不会有帮助,就好像我把它放在ctor中一样,对于这个ctor的所有用法,仍然会有一个注释。

代码语言:javascript
复制
public class StringFileWriter implements IResponsesStorage {

    File file;

    @Inject
    @Singleton
    public StringFileWriter(@myAnnotation File file) {
        this.file = file;
    }

代码语言:javascript
复制
public class MainModule extends AbstractModule {

    @Override
    protected void configure() {

        File resultBaselineFile = new File(Constants.RESULTS_BASELINE_FILE);
        bind(File.class).annotatedWith(ResultBaselineFile.class).toInstance(resultBaselineFile);

        File logLatencyFile = new File(Constants.LATENCY_FILE);
        bind(File.class).annotatedWith(LatencyLogFile.class).toInstance(logLatencyFile);

编辑

主要代码调用2个存储库:一个用于日志文件,另一个用于结果文件。每个存储库都有自己的文件处理程序。这就是问题所在

EN

回答 1

Stack Overflow用户

发布于 2015-02-27 17:51:26

这是对所谓的“机器人腿”问题的一种变化.正如上面的评论所要求的那样,正确的解决方案实际上取决于决策的位置。

在这种情况下,我将如何解决这个问题:

代码语言:javascript
复制
public final class StringFileWriter implements IResponsesStorage {
  private final File file;

  // Note: constructor is not annotated with @Inject
  StringFileWriter(File file) {
    this.file = file;
  }

  // ...

}

public final class StringFileWriterModule extends AbstractModule {
  @Override protected void configure() {}

  @Provides
  @Singleton
  @ResultBaselineFile
  StringFileWriter provideResultBaselineFileWriter(
      @ResultBaselineFile File resultBaselineFile) {
    return new StringFileWriter(resultBaselineFile);
  }

  @Provides
  @Singleton
  @LatencyLogFile
  StringFileWriter provideLatencyLogFileWriter(
      @LatencyLogFile File latencyLogFile) {
    return new StringFileWriter(latencyLogFile);
  }
}

然后,在注入点,您将选择您想要的StringFileWriter

代码语言:javascript
复制
final class MyWorkerClass {
  private final StringFileWriter resultBaselineFileWriter;

  @Inject MyWorkerClass(@ResultBaselineFile StringFileWriter writer) {
    resultBaselineFileWriter = writer;
  }

  // ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28550093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档