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;
}
// ...
}