Spring表達式語言SpEL


    Spring表達式語言,簡稱SpEL,是一個支持運行時查詢和操作對象圖的強大的表達式語言。語法類似於EL:SpEL使用#{…}作為定界符,所有在大括號中的字符都將被認為是SpEL

    SpEL為bean屬性進行動態賦值提供了便利

    通過SpEL可以實現:

  • 通過bean的id對bean進行引用
  • 調用方法及引用對象中的屬性
  • 計算表達式的值
  • 正則表達式的匹配

如果我們要為基本類型或者String類型賦值,我們也可以用SpEL:

整數:<property name="count" value="#{5}">

科學計數法:<property name="capacity" value="#{1e4}">

String可以使用單引號或者雙引號作為字符創的定界符號:

<property name="name" value="#{"Tom"}">或者我們也可以這么寫:

<property name="name" value="#{'Tom'}">

布爾類型"<property name="enabled" value="#{false}" >

我們這里只是說可以用,瞅着都知道這個很麻煩(_)還不如直接賦值,大家知道有這回事就行。

當然我們也可以拿這玩意引用其他對象

<property name="myCar" value="#{car}">這里相當於用了ref屬性

也可以用來引用其他對象的屬性,這種操作我們是無法通過普通操作完成的:

<property name="myCity" value="#{address.city}">

SpEL還可以調用其他方法,還可以鏈式操作,真的可以騷上天:

<property name="myCity" value="#{address.toString()}">

<property name="myCity" value="#{address.roString().toUpperCase()}">

其他還有很多豐富的其他功能:

  • 算數運算符:+、-、*、/、%、^
  • 加號還可以用作字符創鏈接
  • 比較運算符<、>、==、<=、>=、lt、gt、eq、le、ge
  • 邏輯運算符and、or、not、|
  • if-else運算符
  • 正則表達式matches
  • 調用靜態方法或者靜態屬性T()

可以看出SpEL是塊非常龐大的內容,我們需要花很久才能將它真正掌握,這里我就提一些比較常用的功能。

先做一下准備工作,先寫一下新的JavaBean:

Car.java

  1. private String brand;  
  2. private double price;  
  3. //輪胎周長  
  4. private double tyrePerimeter; 

Person.java

  1. private String name;  
  2. //引用address bean city屬性  
  3. private String city;  
  4.     
  5.     
  6. private Car car;  
  7. //根據carprice 確定info  
  8. //car price>=3000000:經理  
  9. //否則為白領  
  10. private String info;  

Address.java和之前的一樣,接下來來寫配置文件beans-spel.xml

SpEL賦字面量的值

  1. <bean id="address" class="com.figsprite.bean.SpEL.Address">  
  2.     <property name="city" value="#{'上海'}"/>  
  3.     <property name="street" value="#{'陸家嘴'}"/>  
  4.  </bean>  

SpEL 算法運算符 調用靜態屬性

  1. <bean id="car" class="com.figsprite.bean.SpEL.Car">  
  2.     <property name="brand" value="奧迪"/>  
  3.     <property name="price" value="5000000"/>  
  4.     <property name="tyrePerimeter" value="#{T(java.lang.Math).PI * 80}"  
  5. </bean>  

SpEL 引用其他對象 引用其他對象屬性 if-else

  1. <bean id="person" class="com.figsprite.bean.SpEL.Person">  
  2.     <property name="car" value="#{car}"/>  
  3.     <property name="city" value="#{address.city}"/>  
  4.     <property name="info" value="#{car.price>3000000?'經理':'白領'}"/>  
  5.     <property name="name" value="Tom"/>  
  6. </bean>  

這里就存在動態賦值,如info屬性,我需要根據car.price的具體值決定info的值

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM