1. 程式人生 > >spring_(9)Spring表示式語言 SpEL

spring_(9)Spring表示式語言 SpEL

SpEL

  • Spring表示式語言(簡稱SpEL) : 是一個支援執行時查詢和操作物件圖的強大的表示式語言。
  • 語法類似於EL : SpEL使用 #{…}作為定界符,所有在大框號中的字元都將被認為是SpEL
  • SpEL為bean的屬性進行動態賦值提供了便利
  • 通過SpEL可以實現:
    • 通過bean的id對bean進行引用
    • 呼叫方法以及引用物件中的屬性
    • 計算表示式的值
    • 正則表示式的匹配

SpEL:字面量

  • 字面量的表示

    • 整數:
    • 小數:
    • 科學計數法:
    • String可以使用單引號或者雙引號作為字串的定界符號:
    • Boolean:

    SpEL:引用Bean、屬性和方法(1)

    • 引用其他物件
 	<!--通過 value 屬性和 SpEL 配置Bean之間的應用關係-->
    <property name="prefix" value="#{prefixGenerator}"></property>
  • 引用其他物件的屬性
   <!--通過 value 屬性和 SpEL 配置 suffix 屬性值為另一個 Bean 的suffix 屬性值-->
<property name="suffix" value="#{sequenceGenerator2.suffix}"></property>
  • 呼叫其他方法,還可以鏈式操作
    <!--通過 value 屬性和 SpEL 配置 suffix 屬性值為另一個 Bean 的方法的返回值-->
    <property name="suffix" value="#{sequenceGenerator2.toString()}"></property>
<!--方法的連綴--><
property
name="suffix" value="#{sequenceGenerator2.toString().toUpperCase}">
</property>
  • 算術運算子號:+ - * / % ^
    <property name="adjustedAmount" value="#{counter.totla} + 42"></property>
  • 加號還可以用作字串連線
    <constractor-arg value="#{ performer.firstName+ '   '+ performer.lastName } "/>
  • 比較運算子:<,>,==,<=,>=,lt,gt,eg,le,ge
    <property name="equal" value="#{counter.totla == 100}"></property>
    <property name="hasCapacity" value="#{counter.totla le 100000}"></property>
  • 邏輯運算子號: and or not l

  • 三位運算子

  • 正則表示式

    <constructor-arg value="#{admin.email matches '[a-zA-Z0-9._%+-][email protected][a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}'}"/>

SpEL:引用Bean、屬性和方法(2)

  • 呼叫靜態方法或靜態屬性:通過T() 呼叫一個類的靜態方法,它將返回一個Class Object,然後再呼叫相應的方法或屬性:
    <property name="initValue" value="#{T(java.lang.Math).PI}"></property>