Spring Bootシリーズ5 Spring@Value属性注入使用総括2


1.@Value注入二
前回の記事ではSpring@Value属性注入の使用概要を紹介します.文章を読んでから、迷うかもしれません.この文章は,私たちはこの問題を解決しようとしている.
1.1前提
テスト属性ファイル:advance_value_inject.properties
server.name=server1,server2,server3
#spelDefault.value=notdefault
HelloWorld_=sss
テストクラスAdvance Value Inject:advanceを導入する.value_inject.propertiesファイルは、属性の注入として
@Component
@PropertySource({"classpath:com/hry/spring/configinject/advance_value_inject.properties"})
public class AdvanceValueInject {
...
}
1.2匁{…}と${…}
使用法{}の内容はSpEL式に適合していなければなりません.詳細な文法は今後、新しい文章紹介を専門に開くことができます.@Value('{spelDefault.value})を通じて属性ファイルに対応する値を取得できますが、属性ファイルにこの属性がないとエラーが発生します.この問題はデフォルト値を付与することによって解決できます.@Value("${spelDefault.value:127.0.0.1}")のように.
詳細コードは以下の通りです.
    //         spelDefault.value,    
    // @Value("${spelDefault.value}")
    // private String spelDefault2;

    //   default.value   ,           
    @Value("${spelDefault.value:127.0.0.1}")
    private String spelDefault;

すみません、ここでは簡単な使い方しか見せません.
    // SpEL:     Hello World concat  
    @Value("#{'Hello World'.concat('!')}")
    private String helloWorld;

    // SpEL:       getBytes  ,    length  
    @Value("#{'Hello World'.bytes.length}")
    private String helloWorldbytes;
${…}と菗との混合使用は、以下のコードの実行順序:属性ファイルから$server.nameを介して値を取得して置換し、その後、SpEL式{server 1,server 2,server 3’.split(')}を実行することになります.
    // SpEL:        ,  ","        , #{} ${}    (     ,       ${}   ,#{}   )
    @Value("#{'${server.name}'.split(',')}")
    private List<String> servers;
上記では${...} #{...}で成功することができますが、コードのように逆に可能ですか?
    // SpEL:        ${}   ,#{}   ,       
    @Value("${#{'HelloWorld'.concat('_')}}")
    private List<String> servers2;
答えはできません.スプリング実行だから、{}タイミングが早いです.この例では、Springは、属性の中から『Hello World』.concat(‘_’)を検索することを試みているので、上記で知られていますが、見つけられなければ、エラーを報告します.したがって、#{} ,${} は不法操作です.
結び目
  • 菗氨{…}はSpEl表現を実行するために使用され、内容を属性
  • に値付けします.
  • ドル(...)は、主に外部属性ファイルの値
  • をロードするために使用されます.
  • 菘{…}と${}は混合して使用することができますが、${} ,#{}
  • が必要です.
    2.コード
    上記のコードはGithubを参照してください.