簡體   English   中英

為單個常量設置多個綁定

[英]guice multiple bindings for a single constant

我有一個使用 guice 進行配置的 java 應用程序。我不認為這是它的目的,但它已經完成了,我只需要做一個小的改變,所以我不想刪除 guice。 基本上,java 屬性綁定到變量,我想將一些綁定到環境變量或 java 屬性。 這是我目前擁有的

bindConstant().annotatedWith(Names.named("value")).to(properties.getProperty("java.property.value"));

這就是我想做的

bindConstant().annotatedWith(Names.named("value")).to(System.getenv("JAVA_PROPERTY_VALUE"));

有沒有辦法將兩者結合起來? 我不能兩者兼得。 或者,這只是默認設置,我基本上已經有了我需要的東西? 即,如果我將 bindConstant 綁定到 System.getenv,除非它在屬性文件中被覆蓋,否則將使用該值(在我的情況下,字符串常量不是完整的屬性名稱,所以我不確定它現在是如何工作的)。

我真的不太了解 guice 的工作原理,我相信在此代碼所在的位置創建了一個注入器,然后用於執行諸如...

@Inject(optional = true)
@Named("value)
private String value;

我基本上希望該值默認為屬性文件中的值,但如果 env 屬性值存在,則將其覆蓋。

我曾嘗試簡單地使用 env var 值(如果它存在),否則使用屬性值,即

bindConstant().annotatedWith(Names.named("value")).to(System.getenv(envVarName) != null && !System.getenv(envVarName).trim().isEmpty() ? System.getenv(envVarName) : properties.getProperty(propertyName));

當定義環境變量而未定義屬性時,它按預期工作,但是當兩者都定義時,總是使用屬性。 這只是讓我知道我對 guice 及其工作原理知之甚少,我在代碼中在屬性名稱和此方法之間有一個非常明確的綁定,但是,它似乎只是一個默認值,之后是用屬性文件中的值覆蓋我的值。

這是非常基本的,但這就是我們做事的方式:

  • 獲取屬性(sys.properties)

some.random.prop=localhost

  • 遍歷 System.getEnv() 覆蓋所有屬性
// Convert SOME_RANDOM_PROP to some.random.prop
properties.put(parseKey(entry.getKey()), entry.getValue());

現在你的屬性應該默認為 app.properties 並用匹配的 env.properties 覆蓋,然后綁定所有他的屬性。

Names.bindProperties(binder(), properties);

這里需要注意的是,現在System.getEnv()毫無意義,但由於您使用 Guice 進行所有注入,這應該不是問題。

暫無
暫無

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

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