问题描述
我有一个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 (将#修改为@)