私は動的プロパティ名を検索することによって値を設定する必要があるインスタンス変数を持っています。Spring SPELを使用して動的プロパティ名を解決するにはどうすればよいですか?
Class Test {
@Value("#{T(java.lang.String).format('filter.%s.disable', getClass().getSimpleName())}")
private boolean disable;
}
disable
はそうtrue
filter.Test.disable = true
とfalse
に評価する必要があります。プロパティが定義されていない場合は、デフォルト値のfalse
を設定することもできます。これは通常、次の構文を使用して行われますが、この場合はわかりません。 @Value("${property:default}")
私はエラーを取得しています:
Caused by: java.lang.IllegalArgumentException: Invalid boolean value [filter.BeanExpressionContext.disable]
も無駄に@Value("${'dcs.cloud.filter.'#{getClass().getSimpleName()}'.disable'}")
と#
と$
の他のいくつかの組み合わせを試してみました。
SPEL docは、異なる構文を使用する表現を評価するための無用のparser.parseExpression
の呼び出しを示していますが、実際には誰もそれを行いません。実際の例ではなくユニットテストからコードを選んだようです。
私はちょうどそれを行い、「環境」を注入して値を調べました。私は、a)リファクタリングがそれを壊すので、クラス名をハードコードしたくなかった。b)サブクラスでは機能しないだろう。 –