Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用guice injector使用注释“getInstance”?_Java_Constructor_Dependency Injection_Annotations_Guice - Fatal编程技术网

Java 如何使用guice injector使用注释“getInstance”?

Java 如何使用guice injector使用注释“getInstance”?,java,constructor,dependency-injection,annotations,guice,Java,Constructor,Dependency Injection,Annotations,Guice,我使用的是一个FileHandler类,它获取一个文件作为参数 我想将它与两个不同的文件一起使用 如何配置喷油器以每次注入不同的文件 像getInstance,带有将返回所需具体实例的注释 注释在这里不会有帮助,就像我把它放在ctor中一样,对于这个ctor的所有用法仍然会有一个注释 public class StringFileWriter implements IResponsesStorage { File file; @Inject @Singleton

我使用的是一个
FileHandler
类,它获取一个
文件
作为参数

我想将它与两个不同的
文件一起使用

如何配置喷油器以每次注入不同的
文件

getInstance
,带有将返回所需具体实例的注释

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

public class StringFileWriter implements IResponsesStorage {

    File file;

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

编辑


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

这是所谓。正如上面的评论所问,正确的解决方案实际上取决于决策的地点

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

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

final class MyWorkerClass {
  private final StringFileWriter resultBaselineFileWriter;

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

  // ...
}

谁来决定是使用日志还是结果文件?主代码调用2个存储库:一个用于日志文件,另一个用于结果文件。每个存储库都有自己的文件处理程序。这就是问题所在,主代码调用2个存储库:一个用于日志文件,另一个用于结果文件。每个存储库都有自己的文件处理程序。这就是问题所在,所以只需将
@ResultBaselineFile-StringFileWriter
@LatencyLogFile-StringFileWriter
注入到“主代码”类中即可。为什么这还不够?
final class MyWorkerClass {
  private final StringFileWriter resultBaselineFileWriter;

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

  // ...
}