国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Spring @Value 屬性注入使用總結(jié)二

1. @Value注入二

在上一篇文章中Spring @Value 屬性注入使用總結(jié)一我們介紹了@Value的常用方式??赐晡恼履憧赡苊曰?{..}和${}有什么區(qū)別以及如何使用。這篇文章,我們嘗試解決這個(gè)問題

1.1 前提

測(cè)試屬性文件:advance_value_inject.properties

server.name=server1,server2,server3#spelDefault.value=notdefaultHelloWorld_=sss
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

測(cè)試類AdvanceValueInject:引入advance_value_inject.properties文件,作為屬性的注入

@Component@PropertySource({"classpath:com/hry/spring/configinject/advance_value_inject.properties"})public class AdvanceValueInject {...}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

1.2 #{…}和${…} ###

#{…}用法
通過@Value(“${spelDefault.value}”)可以獲取屬性文件中對(duì)應(yīng)的值,但是如果屬性文件中沒有這個(gè)屬性,則會(huì)報(bào)錯(cuò)。可以通過賦予默認(rèn)值解決這個(gè)問題,如@Value("${spelDefault.value:127.0.0.1}")

詳細(xì)代碼如下:

    // 如果屬性文件沒有spelDefault.value,則會(huì)報(bào)錯(cuò)    //  @Value("${spelDefault.value}")    //  private String spelDefault2;    // 使用default.value設(shè)置值,如果不存在則使用默認(rèn)值    @Value("${spelDefault.value:127.0.0.1}")    private String spelDefault;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

${…}用法
${…}的{}里面的內(nèi)容必須符合SpEL表達(dá)式,詳細(xì)的語法,以后可以專門開新的文章介紹,這里只演示簡單用法:

    // SpEL:調(diào)用字符串Hello World的concat方法    @Value("#{'Hello World'.concat('!')}")    private String helloWorld;    // SpEL: 調(diào)用字符串的getBytes方法,然后調(diào)用length屬性    @Value("#{'Hello World'.bytes.length}")    private String helloWorldbytes;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

${…}和#{…}混合使用
${...}和#{...}可以混合使用,如下文代碼執(zhí)行順序:通過${server.name}從屬性文件中獲取值并進(jìn)行替換,然后就變成了 執(zhí)行SpEL表達(dá)式#{‘server1,server2,server3’.split(‘,’)}。

    // SpEL: 傳入一個(gè)字符串,根據(jù)","切分后插入列表中, #{}和${}配置使用(注意單引號(hào),注意不能反過來${}在外面,#{}在里面)    @Value("#{'${server.name}'.split(',')}")    private List<String> servers;
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

在上文中在#{}外面,${}在里面可以執(zhí)行成功,那么反過來是否可以呢${}在外面,#{}在里面,如代碼

    // SpEL: 注意不能反過來${}在外面,#{}在里面,這個(gè)會(huì)執(zhí)行失敗    @Value("${#{'HelloWorld'.concat('_')}}")    private List<String> servers2;
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

答案是不能。因?yàn)?a title="Java EE知識(shí)庫" target="_blank" style="color:#df3434; font-weight:bold;">spring執(zhí)行${}是時(shí)機(jī)要早于#{}。在本例中,Spring會(huì)嘗試從屬性中查找#{‘HelloWorld’.concat(‘_’)},那么肯定找到,由上文已知如果找不到,然后報(bào)錯(cuò)。所以${}在外面,#{}在里面是非法操作

小結(jié)

  • #{…} 主要用于加載外部屬性文件中的值
  • ${…} 用于執(zhí)行SpEl表達(dá)式,并將內(nèi)容賦值給屬性
  • #{…} 和${…} 可以混合使用,但是必須#{}外面,${}在里面

2. 代碼

上文代碼見Github

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Spring Security3 SpEL表達(dá)式
Struts2 中的值棧是什么?
【第五章】Spring表達(dá)式語言 之 5.4在Bean定義中使用EL—跟我學(xué)spring3...
Struts2 標(biāo)簽庫 [Tablib] (轉(zhuǎn)) - 蘭色的海洋 - 51CTO技術(shù)博客
SpringEL詳解及應(yīng)用
高效的緩存管理解決方案
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服