Guice PrivateModule提供命名和未命名注入

问题描述

我有一个PrivateModule定义以下配置:

    public void configure() { 
        Optional<String> annotationName = Optional.ofNullable(config.getString(ANNOTATION_NAME_KEY));
        if (annotationName.isPresent()) {
          bind(SqlClient.class).annotatedWith(named(annotationName.get()))
              .toProvider(this::createClient)
              .in(Singleton.class);
          expose(SqlClient.class).annotatedWith(named(annotationName.get()));
        } else {
          bind(SqlClient.class)
              .toProvider(this::createClient)
              .in(Singleton.class);
          expose(SqlClient.class);
        }
   }
   
   @Provides
   private SqlClient createClient() {
        return SqlClient.init(config);
   }

相对于json配置,此私有模块已多次初始化,从而为多个sql客户端提供了不同的配置。当所有配置都具有ANNOTATION_NAME_KEY时,此方法可以正常工作:调用

  @Inject
  @Named("AAA")
  SqlClient aaaClient;

  @Inject
  @Named("BBB")
  SqlClient bbbClient;

返回预期结果。但是当我有一个没有ANNOTATION_NAME_KEY键的json配置时,这可以为没有命名注释的情况提供解决方案,例如

  @Inject
  SqlClient defaultClient;

我收到以下异常:

已经在my.SqlClientModule.configure(SqlClientModule.java:110)上配置了与my.SqlClient的绑定。

我是否缺少某些东西,或者混合使用命名和非命名注入的整个想法是错误的?谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...