Java 从@Provides优化我的代码以绑定到我的guice包中
在我的代码中,在模块包中,我使用googleguice包中的@Provides进行绑定。这是我的工作代码 但是我想用bind而不是@provides来优化我的代码。我尝试了各种方法,但得到了不同的例外。有人能给我建议一下解决办法吗?谢谢Java 从@Provides优化我的代码以绑定到我的guice包中,java,dependency-injection,guice,Java,Dependency Injection,Guice,在我的代码中,在模块包中,我使用googleguice包中的@Provides进行绑定。这是我的工作代码 但是我想用bind而不是@provides来优化我的代码。我尝试了各种方法,但得到了不同的例外。有人能给我建议一下解决办法吗?谢谢 @Provides @Singleton @Named(MY_CONSTANT) public MyObjectRepository myObjectRepository(final DatabaseRepository<O
@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);
}
@提供
@独生子女
@命名(MY_常量)
公共MyObjectRepository MyObjectRepository(最终数据库存储库objectDAODatabaseRepository,
最终默认MyObjectDaoTranslator(默认MyObjectDaoTranslator){
返回新的DynamoDBMyRepository(myDAODatabaseRepository,defaultMyDAOTranslator);
}
@提供
@独生子女
公共数据库存储库myObjectDAODatabaseRepository(最终DAOWriter DAOWriter,
最终DAO检索器(DAO检索器){
返回新的DynamoDBRepository(daoWriter,daoRetriever);
}
@提供
@独生子女
公共道具道具道具(最终田园诗){
返回新的DAOSwriter(dynamoDBMapper);
}
@提供
@独生子女
公共DAO检索器MyObjectDAO检索器(最终IDynamoDBMapper dynamoDBMapper){
返回新的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);
bind(MyObjectRepository.class)
.annotatedWith(name.named(MY_常量))
.to(DynamoDBMyRepository.class)
.在(独生子女班);
绑定(新的TypeLiteral(){})
.to(动力还原类)
.在(独生子女班);
绑定(新的TypeLiteral(){})
.to(DAOWriter.class)
.在(独生子女班);
绑定(新的TypeLiteral(){})
.to(daorretriever.class)
.在(独生子女班);
因为有大量的类/文件,我没有测试过这个。另外,在某些时候,您编写的DAOWriter
是通用的,在另一个时候,您跳过了通用规范,因此为了一致性,我保留了通用部分