java - 优化 @Provides 中的代码以绑定(bind)到我的 guice 包中

标签 java dependency-injection guice

在我的代码中,在模块包中,我使用 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/

相关文章:

Guice injectMembers 方法

java - 如何使用自定义值重新调整 png 文件的宽度和高度?

java - 在java中读取c++字节位域

java - 为什么 Spring @Configuration 类继承没有按预期工作?

actionscript-3 - 如何在as3中使用parsley框架注入(inject)字典?

java - 使用 Java 的 Playframeowk 抛出 JPA 事务失败。由: there is no started appliaction引起

java - 无法解决 Intellij IDEA IDE 中 Scalatra 项目的错误

在 LWJGL 中加载纹理时发生 Java 致命运行时错误

c# - 在 C# 中使用具有依赖注入(inject)的泛型类

java - 针对现有注入(inject)器测试注入(inject)类的方法