首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring SpEL 表達式語言完全指南:字面值、Bean引用、運算符、正則與靜態方法調用

     編輯:Java 綜合教學

什麼是 SpEL

Spring Expression Language (SpEL) 是一個強大的表達式語言,運行時解析並賦值給 Bean 屬性。語法用 #{...} 界定,功能遠超舊 EL:支持方法調用、運算、正則、集合操作、靜態成員訪問等。

一、字面值表示

類型示例XML 配置
整數23<property name="age" value="#{23}"/>
小數2300.55<property name="salary" value="#{2300.55}"/>
科學計數法1e4 (=10000)<property name="salary" value="#{1e4}"/>
字符串'emp01' 或 "emp01"<property name="empName" value="#{'emp01'}"/>
布爾值false<property name="formal" value="#{false}"/>

二、引用 Bean、屬性與方法

1. 引用其他 Bean

<bean id="employee" class="..." p:empName="#{'emp01'}" p:age="#{23}"/>
<bean id="department" class="..." p:deptName="#{'dept01'}" p:employee="#{employee}"/>

2. 引用 Bean 屬性(調用 getter)

<bean id="department2" class="..." p:deptName="AAAA" p:employee-ref="employee"/>
<bean id="department" class="..." p:deptName="#{department2.deptName}" p:employee="#{employee}"/>

輸出:Department{deptName='AAAA', employee=Employee{empName='emp01', age=23}}

3. 調用方法與鏈式操作

<property name="deptName" value="#{department2.deptName.toString().toLowerCase()}"/>

輸出:deptName='aaaa'

三、運算符支持

類別運算符示例結果
算術+ - * / % ^#{53.32 + 12.23}65.55
字符串連接+#{'emp01' + ' ' + 12}emp01 12
比較< > == <= >= lt gt eq le ge#{100 == 100}true
邏輯and or not |#{100 == 100 and 100 gt 80}true
三元? :#{100 == 100 ? false : true}false
正則匹配matches#{'a@b.com' matches '^\\w+@\\w+\\.\\w+$'}true/false

四、調用靜態方法/字段

通過 T(全限定類名) 獲取 Class 對象,再訪問靜態成員。

<property name="salary" value="#{T(java.lang.Math).PI * 1000}"/>

輸出:salary=3141.592653589793

五、集合與數組操作(補充)

<!-- List 選取 -->
#{myList[0]}                  <!-- 第一個元素 -->
#{myList.?[value > 10]}       <!-- 過濾 -->
#{myList.^[value > 10]}       <!-- 第一個匹配 -->
#{myList.$[value > 10]}       <!-- 最後一個匹配 -->

<!-- Map 選取 -->
#{myMap['key']}               <!-- 獲取值 -->
#{myMap.?[value > 10]}        <!-- 過濾 -->

六、最佳實踐建議

  1. 簡單屬性用 ${...}:PropertyPlaceholderConfigurer 解析,性能更好,職責單一。
  2. 複雜邏輯用 #{...}:運算、方法調用、條件判斷。
  3. 避免過度使用:複雜業務邏輯應放入 Java 代碼或 @Value 配合 SpelExpressionParser 程序化解析。
  4. 注解方式:@Value("#{systemProperties['user.region']}") 注入系統屬性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved