我的类(让我们称它们为X
和Y
)都实现Parser
接口执行(相对)CPU密集型操作来构建某些语法的解析器(X
和Y
的不同语法)。
现在我想将(使用 Guice)X
和Y
的依赖项注入(上层)解析器P
的构造函数中。P
的两个参数都应该是Parser
类型:
class P implements Parser {
@Inject
public P(Parser x, Parser y) {
// ...
}
}
我怎样才能让Guice区分P
的两个论点中的哪一个应该得到X
和Y
?
如您所知,X
和Y
应该@Singleton
注释(但此注释似乎与问题无关)。
您需要像这样使用命名注释:
class P implements Parser {
@Inject
public P(@Named("x") Parser x, @Named("y") Parser y) {
// ...
}
}
在 Guice config 中将每个命名变量分配给他自己的实现类
bind(Parser.class)
.annotatedWith(Names.named("x"))
.to(ParserXImplementation.class);
bind(Parser.class)
.annotatedWith(Names.named("y"))
.to(ParserYImplementation.class);