Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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 从@Provides优化我的代码以绑定到我的guice包中_Java_Dependency Injection_Guice - Fatal编程技术网

Java 从@Provides优化我的代码以绑定到我的guice包中

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

在我的代码中,在模块包中,我使用googleguice包中的@Provides进行绑定。这是我的工作代码

但是我想用bind而不是@provides来优化我的代码。我尝试了各种方法,但得到了不同的例外。有人能给我建议一下解决办法吗?谢谢

    @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
是通用的,在另一个时候,您跳过了通用规范,因此为了一致性,我保留了通用部分