spring_bean的作用域,spring使用外部屬性檔案和spring_SpEL(三)
1,spring的作用域
2,spring使用外部屬性檔案
這裡以db.properties為例,先建立好db.properties檔案,如圖:
在spring配置檔案中:
說明:
在配置檔案裡配置bean時,有時需要在bean的配置裡混入系統部署的細節資訊(例如:檔案路徑,資料來源配置資訊等),而這些部署細節實際上需要和bean配置相分離
Spring提供了一個PropertyPlaceholderConfigurer的BeanFactory後置處理器,這個處理器允許使用者將bean配置的部分內容外移到屬性檔案中,可以在bean配置檔案裡使用形式為$(var)的變數,
PropertyPlaceholderConfigurer從屬性檔案里載入屬性,並使用這些屬性來替換變數。
Spring還允許在屬性檔案中使用$(propName),以實現屬性之間的相互引用。
註冊PropertyPlaceholderConfigurer
Spring2.0
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:db.properties"></property>
</bean>
Spring2.5之後:可通過<context:property-placeholder>元素簡化:
-<beans>中新增context Schema定義
-在配置檔案中加入如下配置:
<context:property-placeholder location="classpath:db.properties"/>
Spring的SpEL表示式
Spring表示式語言:SpEL
Spring表示式語言(簡稱SpEL):是一個支援執行時查詢和操作物件圖的強大的表示式語言。
語法類似於EL: SpEL使用#{}作為定界符,所有在大括號中的字元都將被認為是SpEL
SpEL為bean的屬性進行動態賦值提供了便利
通過SpEL可以實現:
1 通過bean的id對bean進行引用
2 呼叫方法以及引用物件中的屬性
3 計算表示式的值
4 正規表示式的匹配
SpEL:字面量
字面量的表示:
整數:<property name="count" value="#{5}"/>
小數:<property name="frequency" value="#{89.7}"/>
科學計數法:<property name="capacity" value="#{1e4}"/>
String可以使用單引號或者雙引號作為字串的定界符號:
<property name="name" value="#{'Chuck'}"/>或<property name='name' value='#{"Chuck"}'
Boolean:<property name="enabled" value="#{false}"/>
SpEL:引用Bean、屬性和方法
1 引用其他物件:
<!--通過value屬性和SpEL配置Bean之間的應用關係-->
<property name="prefix" value="#{prefixGenerator}"></property>
2 引用其他物件的屬性
<!--通過value屬性和SpEL配置suffix屬性值為另一個bean的suffix屬性值-->
<property name="suffix" value="#{sequenceGenerator2.suffix}"/>
呼叫其他方法,還可以鏈式操作
<!--通過value屬性和SpEL配置suffix屬性值為另一個bean的方法的返回值-->
<property name="suffix" value="#{sequenceGenerator2.toString()}"/>
<!--方法的連耦-->
<property name="suffix"
value="#{sequenceGenerator2.toString().toUpperCase()}"/>
SpEL支援的運算子號
1 算術運算子:+,-,*,/,%,^
<property name="adjustedAmount" value="#{counter.total+42}"/>
<property name="adjustedAmount" value="#{counter.total-20}"/>
<property name="circueference" value="#{2*T(java.lang.Math).PI*circle.radius}"/>
<property name="average" value="#{counter.total/counter.counter}"/>
<property name="remainder" value="#{counter.total%counter.count}"/>
<property name="area" value="#{T(java.lang.Math).PI*circle.radius ^2}"/>
2加號還可以用作字串連結
<constructor-arg
value="#{performer.firstName+''+performer.lastName}"/>
3 比較運算子:<,>,==,<=,>=,lt,gt,eq,le,ge
<property name="equal" value="#{counter.total==100}"/>
<property name="hasCapacity" value="#{counter.total le 100000}"/>
4 邏輯運算子: and,or,not,|
<property name="largeCircle" value="#{shape.kind=='circle' and shape.perimeter gt 100000}"/>
<property name="outOfStock" value="#{!product.available}"/>
<property name="outOfStack" value="#{not product.available}"/>
5 if-else運算子:?:(temary),?:(Elvis)
<constructor-arg
value="#{songSelector.selectSong()=='Jingle Bells'?piano:'jingle bells'}"/>
6 if-else的變體
<constructor-arg
value="#{kenny.song ?: 'Greensleeves'}"/>
7正規表示式:matches
<constructor-arg
value="#{admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}'}"/>
8 呼叫靜態方法或靜態屬性:通過T()呼叫一個類的靜態方法,它將返回一個Class Object,然後在呼叫相應的方法或屬性
<property name="initValue"
value="#{T(java.lang.Math).PI}"></property>
測試:在spring中的配置:
用到的相關java類(都要加上set/get方法和重寫toString方法,這裡有的可能沒有截全,重寫toString是為了測試):
相關文章
- 作用域、連結屬性和儲存型別型別
- Spring Boot讀取自定義外部屬性Spring Boot
- 檔案的屬性
- Spring YAML與屬性檔案配置檔案對比 | BaeldungSpringYAML
- 檔案屬性
- Linux的檔案屬性和目錄配置Linux
- Linux檔案屬性Linux
- spring bean的作用域和生命週期SpringBean
- Spring(三)屬性配置細節Spring
- spring cloud+spring boot 電子商務spring boot獲取配置檔案的屬性CloudSpring Boot
- 檔案時間屬性
- 檔案屬性資訊
- javascript中的作用域(全域性變數和區域性變數)JavaScript變數
- js的作用域和作用域鏈JS
- python學習筆記 區域性和全域性作用域Python筆記
- c語言中塊作用域的優先順序高於檔案作用域C語言
- Spring Bean作用域SpringBean
- Spring中Bean的作用域SpringBean
- 函式(三)作用域之變數作用域、函式巢狀中區域性函式作用域、預設值引數作用域函式變數巢狀
- Spring中如何為屬性配置檔案自動產生文件?Spring
- Mac系統檔案屬性Mac
- node實現檔案屬性批量修改(時間屬性)
- webpack配置檔案中屬性的位置和資料結構Web資料結構
- Vue 匿名、具名和作用域插槽的使用Vue
- Spring 當中的Bean 作用域SpringBean
- [spring-core]作用域Spring
- win10怎麼更改檔案屬性 win10怎樣修改檔案屬性Win10
- win10如何修改音樂檔案屬性_win10更改音樂檔案屬性的方法Win10
- PHP獲取檔案基本屬性的方法PHP
- 屬性配置檔案詳解(2)
- Visual Studio 檔案 BuildAction 屬性值UILDA
- Spring的BeanFactoryPostProcessor中屬性SpringBean
- display:block display:inline-block 的屬性、呈現和作用BloCinline
- <checkBox>標籤的value屬性的作用
- Spring中Bean的作用域有哪些?SpringBean
- node實現檔案屬性批量修改(檔名)
- 03.MyBatis學習-----全域性配置檔案_properties_引入外部配置檔案MyBatis
- 讀《我和Labview》7控制元件的區域性變數和屬性View控制元件變數
- 檔案屬性及find命令總結