簡體   English   中英

基於注解值的Guice綁定

[英]Guice binding based on annotation value

我的用例是這樣的。 我的系統已經有一個配置系統,我們在一個文本文件中添加配置,類似於屬性文件,但不完全一樣。 我想重用相同的配置系統。 配置系統提供了這個接口:

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
    }
}

就像是

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

你可以喜歡它,或者只是手動添加你希望在那里的每個屬性。 如果您的configProvider可以遍歷字段,則可能會更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM