在我的代码中,在模块包中,我使用 google guice 包中的 @Provides 进行绑定(bind)。这是我的工作代码。
但是我想使用bind而不是@provides来优化我的代码。我尝试了各种方法,但得到了不同的异常(exception)。有人可以建议我解决方案吗?谢谢
@Provides
@Singleton
@Named(MY_CONSTANT)
public MyObjectRepository myObjectRepository(final DatabaseRepository<ObjectDAO> objectDAODatabaseRepository,
final DefaultMyObjectDAOTranslator defaultMyObjectDAOTranslator) {
return new DynamoDBMyRepository(myDAODatabaseRepository, defaultMyDAOTranslator);
}
@Provides
@Singleton
public DatabaseRepository<MyObjectDAO> myObjectDAODatabaseRepository(final DAOWriter<MyObjectDAO> daoWriter,
final DAORetriever<MyObjectDAO> daoRetriever) {
return new DynamoDBRepository<>(daoWriter, daoRetriever);
}
@Provides
@Singleton
public DAOWriter daoWriter(final IDynamoDBMapper dynamoDBMapper) {
return new DAOWriter(dynamoDBMapper);
}
@Provides
@Singleton
public DAORetriever<MyObjectDAO> myObjectDAORetriever(final IDynamoDBMapper dynamoDBMapper) {
return new DAORetriever<>(dynamoDBMapper, MyObjectDAO.class);
}
最佳答案
我相信以下内容应该有效:
bind(MyObjectRepository.class)
.annotatedWith(Names.named(MY_CONSTANT))
.to(DynamoDBMyRepository.class)
.in(Singleton.class);
bind(new TypeLiteral<DatabaseRepository<MyObjectDAO>>(){})
.to(DynamoDBRepository.class)
.in(Singleton.class);
bind(new TypeLiteral<DAOWriter<MyObjectDAO>>(){})
.to(DAOWriter.class)
.in(Singleton.class);
bind(new TypeLiteral<DAORetriever<MyObjectDAO>>(){})
.to(DAORetriever.class)
.in(Singleton.class);
由于类/文件数量较多,我没有对此进行测试。另外,在某些时候您会写到 DAOWriter
是通用的,而在另一个时候,您会跳过该通用规范,因此为了保持一致性,我保留了该通用部分。
关于java - 优化 @Provides 中的代码以绑定(bind)到我的 guice 包中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58696335/