基于注释值的Guice绑定

时间:2020-08-10 15:06:40

标签: java guice

我的用例是这样的。我的系统已经有一个配置系统,其中我们在文本文件中添加配置,类似于属性文件,但不完全相同。我想重用相同的配置系统。配置系统提供此接口:

public interface ConfigurationProvider {
   Boolean getBoolean(String key);
   String getString(String key);
   Long getLong(String key);
   ...
}

我想使用@Named批注来注入配置值,例如:

public ClassA {
   String stringVal;
   Long longVal;

   @Inject
   public ClassA(@Named("some_str_val" String strVal, @Named("some_long_val") Long longVal)) {
       stringVal = strVal;
       longVal = longVal;
   }
}

我不确定如何根据注释值进行绑定。

class MyConfigModule extends AbstractModule {
    ConfigurationProvider configProvider;
    MyConfigModule(ConfigurationProvider configProvider) {
       configProvider = configProvider;
    }

    public void configure() {
       // Here, I would want to bind String annotated with Named to getString(annotation.value), but not sure how to do that
    }
}

1 个答案:

答案 0 :(得分:0)

类似

bind(String.class).annotatedWith(Names.named("property.name")).toInstance(configProvider.getString("property.name"));

您可以看中它,或者只是手动添加您希望在其中添加的每个属性。如果您的configProvider可以遍历字段,则可能会更容易。

相关问题