- Spring SpEL 教程
- Spring SpEL - 首頁
- Spring SpEL - 概述
- Spring SpEL - 環境搭建
- Spring SpEL - 建立專案
- 表示式求值
- Spring SpEL - 表示式介面
- Spring SpEL - EvaluationContext
- Bean 配置
- Spring SpEL - XML 配置
- Spring SpEL - 註解配置
- 語言參考
- Spring SpEL - 字面量表達式
- Spring SpEL - 屬性
- Spring SpEL - 陣列
- Spring SpEL - 列表
- Spring SpEL - Map
- Spring SpEL - 方法
- 運算子
- Spring SpEL - 關係運算符
- Spring SpEL - 邏輯運算子
- Spring SpEL - 數學運算子
- Spring SpEL - 賦值運算子
- 特殊運算子
- Spring SpEL - 三元運算子
- Spring SpEL - Elvis 運算子
- Spring SpEL - 安全導航運算子
- 集合
- Spring SpEL - 集合選擇
- Spring SpEL - 集合投影
- 其他特性
- Spring SpEL - 構造器
- Spring SpEL - 變數
- Spring SpEL - 函式
- Spring SpEL - 表示式模板
- Spring SpEL - 有用資源
- Spring SpEL - 快速指南
- Spring SpEL - 有用資源
- Spring SpEL - 討論
Spring SpEL - 快速指南
Spring SpEL - 概述
Spring 表示式語言 (SpEL) 是一種非常強大的表示式語言,它支援在執行時查詢和操作物件圖。它提供了許多高階功能,例如方法呼叫和基本的字串模板功能。
Spring 表示式語言最初是為 Spring 社群建立的,旨在提供一種單一的、得到良好支援的表示式語言,可在 Spring 產品組合中的所有產品中使用。雖然 SpEL 作為 Spring 產品組合中表達式求值的基石,但它並非直接與 Spring 繫結,可以獨立使用。
以下是 Spring 表示式語言 (SpEL) 支援的功能列表:
字面量表達式
布林和關係運算符
正則表示式
類表示式
訪問屬性、陣列、列表、對映
方法呼叫
關係運算符
賦值
呼叫建構函式
Bean 引用
陣列構造
內聯列表
三元運算子
變數
使用者定義函式
集合投影
集合選擇
模板表示式
我們將在接下來的章節中涵蓋每個主題。
Spring SpEL - 環境搭建
本章將指導您如何準備開發環境以開始使用 Spring 框架的工作。它還將教您如何在設定 Spring 框架之前在您的機器上設定 JDK、Maven 和 Eclipse:
設定 Java 開發工具包 (JDK)
您可以從 Oracle 的 Java 網站下載最新版本的 SDK:Java SE 下載。您將在下載的檔案中找到安裝 JDK 的說明,按照給定的說明安裝和配置設定。最後設定 PATH 和 JAVA_HOME 環境變數以引用包含 java 和 javac 的目錄,通常分別為 java_install_dir/bin 和 java_install_dir。
如果您正在執行 Windows 並且已將 JDK 安裝在 C:\jdk-11.0.11 中,則需要在 C:\autoexec.bat 檔案中新增以下行。
set PATH=C:\jdk-11.0.11;%PATH% set JAVA_HOME=C:\jdk-11.0.11
或者,在 Windows NT/2000/XP 上,您需要右鍵單擊“我的電腦”,選擇“屬性”→“高階”→“環境變數”。然後,您需要更新 PATH 值並單擊“確定”按鈕。
在 Unix(Solaris、Linux 等)上,如果 SDK 安裝在 /usr/local/jdk-11.0.11 中並且您使用 C shell,則需要將以下內容放入 .cshrc 檔案中。
setenv PATH /usr/local/jdk-11.0.11/bin:$PATH setenv JAVA_HOME /usr/local/jdk-11.0.11
或者,如果您使用整合開發環境 (IDE),如 Borland JBuilder、Eclipse、IntelliJ IDEA 或 Sun ONE Studio,則需要編譯並執行一個簡單的程式以確認 IDE 知道您已將 Java 安裝在哪裡。否則,您需要按照 IDE 文件中給出的說明進行正確的設定。
設定 Eclipse IDE
本教程中的所有示例均使用 Eclipse IDE 編寫。因此,我們建議您在機器上安裝最新版本的 Eclipse。
要安裝 Eclipse IDE,請從www.eclipse.org/downloads下載最新的 Eclipse 二進位制檔案。下載安裝後,將二進位制分發版解壓縮到方便的位置。例如,在 Windows 上的 C:\eclipse 中,或在 Linux/Unix 上的 /usr/local/eclipse 中,最後適當地設定 PATH 變數。
可以透過在 Windows 機器上執行以下命令啟動 Eclipse,或者只需雙擊 eclipse.exe 即可
%C:\eclipse\eclipse.exe
可以透過在 Unix(Solaris、Linux 等)機器上執行以下命令啟動 Eclipse:
$/usr/local/eclipse/eclipse
成功啟動後,如果一切正常,則應顯示以下結果:
設定 Maven
在本教程中,我們使用 maven 來執行和構建基於 spring 的示例。請按照Maven - 環境搭建來安裝 maven。
我們將在接下來的章節中涵蓋每個主題。
Spring SpEL - 建立專案
使用 eclipse,選擇檔案→新建→Maven 專案。勾選建立簡單專案(跳過原型選擇)並單擊下一步。
輸入詳細資訊,如下所示:
groupId - com.tutorialspoint
artifactId - springspel
version - 0.0.1-SNAPSHOT
name - springspel
description - Spring SpEL 專案
單擊“完成”按鈕,將建立一個新專案。
pom.xml
使用 Spring Core 依賴項更新 pom.xml。以下是 pom.xml 的完整內容:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tutorialspoint</groupId>
<artifactId>springspel</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springspel</name>
<description>Spring SpEL Project</description>
<properties>
<org.springframework.version>5.3.9</org.springframework.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
applicationcontext.xml
在src → main → resources中建立 applicationcontext.xml,內容如下。
applicationcontext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> </beans>
Spring SpEL - 表示式介面
ExpressionParser 是 Spring SpEL 的主要介面,它有助於將表示式字串解析為已編譯的表示式。這些已編譯的表示式可以被求值,並支援解析模板以及標準表示式字串。
語法
以下是如何建立 ExpressionParser 並使用其物件獲取值的示例。
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Welcome to Tutorialspoint'");
String message = (String) exp.getValue();
它應該列印如下結果:
Welcome to Tutorialspoint
ExpressionParser - 負責解析表示式字串的介面。
Expression - 負責求值表示式字串的介面。
異常 - ParseException 和 EvaluationException 可能會在 parseExpression 和 getValue 方法呼叫期間丟擲。
SpEL 支援呼叫方法、呼叫建構函式和訪問屬性。以下示例顯示了各種用例。
示例
以下示例顯示了一個類 MainApp。
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增以下檔案:
MainApp.java - 執行和測試的主應用程式。
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
public class MainApp {
public static void main(String[] args) {
ExpressionParser parser = new SpelExpressionParser();
// parse a plain text
Expression exp = parser.parseExpression("'Welcome to tutorialspoint'");
String message = (String) exp.getValue();
System.out.println(message);
// invoke a method
exp = parser.parseExpression("'Welcome to tutorialspoint'.concat('!')");
message = (String) exp.getValue();
System.out.println(message);
// get a property
exp = parser.parseExpression("'Welcome to tutorialspoint'.bytes");
byte[] bytes = (byte[]) exp.getValue();
System.out.println(bytes.length);
// get nested properties
exp = parser.parseExpression("'Welcome to tutorialspoint'.bytes.length");
int length = (Integer) exp.getValue();
System.out.println(length);
//Calling constructor
exp = parser.parseExpression("new String('Welcome to tutorialspoint').toUpperCase()");
message = (String) exp.getValue();
System.out.println(message);
}
}
輸出
Welcome to tutorialspoint Welcome to tutorialspoint! 25 25 WELCOME TO TUTORIALSPOINT
Spring SpEL - EvaluationContext
EvaluationContext 是 Spring SpEL 的一個介面,它有助於在上下文中執行表示式字串。在表示式求值期間遇到引用時,會在該上下文中解析引用。
語法
以下是如何建立 EvaluationContext 並使用其物件獲取值的示例。
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'name'");
EvaluationContext context = new StandardEvaluationContext(employee);
String name = (String) exp.getValue();
它應該列印如下結果
Mahesh
這裡的結果是 employee 物件的 name 欄位的值,Mahesh。StandardEvaluationContext 類指定了針對其求值表示式的物件。一旦建立了上下文物件,就不能更改 StandardEvaluationContext。它快取狀態並允許快速執行表示式求值。以下示例顯示了各種用例。
示例
以下示例顯示了一個類 MainApp。
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增以下檔案:
Employee.java - 員工類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
public class Employee {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) {
Employee employee = new Employee();
employee.setId(1);
employee.setName("Mahesh");
ExpressionParser parser = new SpelExpressionParser();
EvaluationContext context = new StandardEvaluationContext(employee);
Expression exp = parser.parseExpression("name");
// evaluate object using context
String name = (String) exp.getValue(context);
System.out.println(name);
Employee employee1 = new Employee();
employee1.setId(2);
employee1.setName("Rita");
// evaluate object directly
name = (String) exp.getValue(employee1);
System.out.println(name);
exp = parser.parseExpression("id > 1");
// evaluate object using context
boolean result = exp.getValue(context, Boolean.class);
System.out.println(result); // evaluates to false
result = exp.getValue(employee1, Boolean.class);
System.out.println(result); // evaluates to true
}
}
輸出
Mahesh Rita false true
Spring SpEL - 基於 XML 的配置
SpEL 表示式可用於基於 XML 的 bean 配置
語法
以下是如何在 xml 配置中使用表示式的示例。
<bean id="randomNumberGenerator" class="com.tutorialspoint.RandomNumberGenerator">
<property name="randomNumber" value="#{ T(java.lang.Math).random() * 100.0 }"/>
</bean>
這裡我們指定了一個屬性,使用 Math.random() 方法填充。對於類,其名稱應為完全限定的名稱。我們也可以使用系統變數,方法是使用systemProperties。它是一個內建變數。
<property name="country" value="#{ systemProperties['user.country'] }"/>
我們也可以使用另一個 bean 以及 SpEL 表示式,如下所示
<property name="id" value="#{ randomNumberGenerator.randomNumber }"/>
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
RandomNumberGenerator.java - 隨機數生成器類。
Employee.java - 員工類。
MainApp.java - 執行和測試的主應用程式。
applicationcontext.xml - bean 配置檔案。
以下是 RandomNumberGenerator.java 檔案的內容:
package com.tutorialspoint;
public class RandomNumberGenerator {
private int randomNumber;
public int getRandomNumber() {
return randomNumber;
}
public void setRandomNumber(int randomNumber) {
this.randomNumber = randomNumber;
}
}
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
public class Employee {
private int id;
private String name;
private String country;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@Override
public String toString() {
return "[" + id + ", " + name + ", " + country + "]";
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationcontext.xml");
Employee employee = (Employee) applicationContext.getBean("employee");
System.out.println(employee);
}
}
以下是 applicationcontext.xml 檔案的內容:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="randomNumberGenerator" class="com.tutorialspoint.RandomNumberGenerator">
<property name="randomNumber" value="#{ T(java.lang.Math).random() * 100.0 }"/>
</bean>
<bean id="employee" class="com.tutorialspoint.Employee">
<property name="id" value="#{ randomNumberGenerator.randomNumber }"/>
<property name="country" value="#{ systemProperties['user.country'] }"/>
<property name="name" value="Mahesh"/>
</bean>
</beans>
輸出
[84, Mahesh, IN]
Spring SpEL - 基於註解的配置
SpEL 表示式可用於基於註解的 bean 配置
語法
以下是如何在基於註解的配置中使用表示式的示例。
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private int id;
這裡我們使用 @Value 註解,並在屬性上指定了一個 SpEL 表示式。類似地,我們也可以在 setter 方法、建構函式和自動裝配期間指定 SpEL 表示式。
@Value("#{ systemProperties['user.country'] }")
public void setCountry(String country) {
this.country = country;
}
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工類。
AppConfig.java - 配置類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Employee {
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private int id;
private String name;
private String country;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
@Value("Mahesh")
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
@Value("#{ systemProperties['user.country'] }")
public void setCountry(String country) {
this.country = country;
}
@Override
public String toString() {
return "[" + id + ", " + name + ", " + country + "]";
}
}
以下是 AppConfig.java 檔案的內容:
package com.tutorialspoint;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.tutorialspoint")
public class AppConfig {
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainApp {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(AppConfig.class);
context.refresh();
Employee emp = context.getBean(Employee.class);
System.out.println(emp);
}
}
輸出
[84, Mahesh, IN]
Spring SpEL - 字面量表達式
SpEL 表示式支援以下型別的字面量:
字串 - 單引號分隔的字串。要使用單引號,請在其周圍再加一個單引號。
數字 - 支援 int、實數和十六進位制表示式。
布林值
null
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
MainApp.java - 執行和測試的主應用程式。
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
public class MainApp {
public static void main(String[] args) {
ExpressionParser parser = new SpelExpressionParser();
// parse a simple text
String message = (String) parser.parseExpression("'Tutorialspoint'").getValue();
System.out.println(message);
// parse a double from exponential expression
double avogadros = (Double) parser.parseExpression("6.0221415E+23").getValue();
System.out.println(avogadros);
// parse an int value from Hexadecimal expression
int intValue = (Integer) parser.parseExpression("0x7FFFFFFF").getValue();
System.out.println(intValue);
// parse a boolean
boolean booleanValue = (Boolean) parser.parseExpression("true").getValue();
System.out.println(booleanValue);
// parse a null object
Object nullValue = parser.parseExpression("null").getValue();
System.out.println(nullValue);
}
}
輸出
Tutorialspoint 6.0221415E23 2147483647 true null
Spring SpEL - 屬性
SpEL 表示式支援訪問物件的屬性。
我們也可以在 SpEL 表示式中訪問巢狀屬性。
在 SpEL 表示式中,屬性的首字母不區分大小寫。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
import java.util.Date;
public class Employee {
private int id;
private String name;
private Date dateOfBirth;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
@Override
public String toString() {
return "[" + id + ", " + name + ", " + dateOfBirth + "]";
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
Employee employee = new Employee();
employee.setId(1);
employee.setName("Mahesh");
employee.setDateOfBirth(new SimpleDateFormat("YYYY-MM-DD").parse("1985-12-01"));
EvaluationContext context = new StandardEvaluationContext(employee);
int birthYear = (Integer) parser.parseExpression("dateOfBirth.Year + 1900").getValue(context);
System.out.println(birthYear);
String name = (String) parser.parseExpression("name").getValue(context);
System.out.println(name);
}
}
輸出
1984 Mahesh
Spring SpEL - 陣列
SpEL 表示式支援訪問陣列並使用物件的陣列索引。
我們也可以在 SpEL 表示式中訪問巢狀陣列。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工類。
Dept.java - 部門類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
public class Employee {
private String[] awards;
public String[] getAwards() {
return awards;
}
public void setAwards(String[] awards) {
this.awards = awards;
}
}
以下是 Dept.java 檔案的內容:
package com.tutorialspoint;
public class Dept {
private Employee[] employees;
public Employee[] getEmployees() {
return employees;
}
public void setEmployees(Employee[] employees) {
this.employees = employees;
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
Employee employee = new Employee();
String[] awards = {"Star of the Month", "Champion", "Accelerator"};
employee.setAwards(awards);
Employee[] employees = { employee };
Dept dept = new Dept();
dept.setEmployees(employees);
EvaluationContext employeeContext = new StandardEvaluationContext(employee);
// evaluates to "Accelerator"
String award = parser.parseExpression("awards[2]").getValue(employeeContext, String.class);
System.out.println(award);
EvaluationContext deptContext = new StandardEvaluationContext(dept);
// evaluates to "Champion"
award = parser.parseExpression("employees[0].awards[1]").getValue(deptContext, String.class);
System.out.println(award);
}
}
輸出
Accelerator Champion
Spring SpEL - 列表
SpEL 表示式支援訪問列表並使用物件的列表索引。
我們也可以在 SpEL 表示式中訪問巢狀列表。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工類。
Dept.java - 部門類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
public class Employee {
private List<String> awards;
public List<String> getAwards() {
return awards;
}
public void setAwards(List<String> awards) {
this.awards = awards;
}
}
以下是 Dept.java 檔案的內容:
package com.tutorialspoint;
public class Dept {
private List<Employee> employees;
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import java.util.Arrays;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
Employee employee = new Employee();
employee.setAwards(Arrays.asList("Star of the Month", "Champion", "Accelerator"));
Dept dept = new Dept();
dept.setEmployees(Arrays.asList(employee));
EvaluationContext employeeContext = new StandardEvaluationContext(employee);
// evaluates to "Accelerator"
String award = parser.parseExpression("awards.get(2)").getValue(employeeContext, String.class);
System.out.println(award);
EvaluationContext deptContext = new StandardEvaluationContext(dept);
// evaluates to "Champion"
award = parser.parseExpression("employees.get(0).awards.get(1)").getValue(deptContext, String.class);
System.out.println(award);
}
}
輸出
Accelerator Champion
Spring SpEL - Map
SpEL 表示式支援訪問對映。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
import java.util.Map;
public class Employee {
private Map<String, String> offices;
public Map<String, String> getOffices() {
return offices;
}
public void setOffices(Map<String, String> offices) {
this.offices = offices;
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
Employee employee = new Employee();
Map<String, String> officeMap = new HashMap();
officeMap.put("IN", "Hyderabad");
officeMap.put("UK", "London");
employee.setOffices(officeMap);
EvaluationContext employeeContext = new StandardEvaluationContext(employee);
// evaluates to "Hyderabad"
String city = parser.parseExpression("offices['IN']").getValue(employeeContext, String.class);
System.out.println(city);
}
}
輸出
Hyderabad
Spring SpEL - 方法
SpEL 表示式支援訪問物件的方法。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
public class Employee {
private List<String> awards;
public List<String> getAwards() {
return awards;
}
public void setAwards(List<String> awards) {
this.awards = awards;
}
public boolean isAwardee() {
return awards != null && awards.size() > 0;
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import java.util.Arrays;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
Employee employee = new Employee();
employee.setAwards(Arrays.asList("Star of the Month", "Champion", "Accelerator"));
EvaluationContext employeeContext = new StandardEvaluationContext(employee);
// string literal, evaluates to "t"
String t = parser.parseExpression("'Tutorials'.substring(2, 3)").getValue(String.class);
System.out.println(t);
// evaluates to true
boolean isAwardee = parser.parseExpression("isAwardee()").getValue(employeeContext, Boolean.class);
System.out.println(isAwardee);
}
}
輸出
t true
Spring SpEL - 關係運算符
SpEL 表示式支援關係運算符,如 <、>、equals 等。它還支援 instanceof 和 matches 運算子。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
MainApp.java - 執行和測試的主應用程式。
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
// evaluates to true
boolean result = parser.parseExpression("2 == 2").getValue(Boolean.class);
System.out.println(result);
// evaluates to false
result = parser.parseExpression("2 < -5.0").getValue(Boolean.class);
System.out.println(result);
// evaluates to true
result = parser.parseExpression("'black' < 'block'").getValue(Boolean.class);
System.out.println(result);
// evaluates to false
result = parser.parseExpression("'xyz' instanceof T(int)").getValue(Boolean.class);
System.out.println(result);
// evaluates to false
result = parser.parseExpression("'5.0067' matches '^-?\\d+(\\.\\d{2})?$'").getValue(Boolean.class);
System.out.println(result);
}
}
輸出
true false true false false
Spring SpEL - 邏輯運算子
SpEL 表示式支援邏輯運算子,如 AND、OR 和 NOT。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
MainApp.java - 執行和測試的主應用程式。
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
// evaluates to true
boolean result = parser.parseExpression("true and true").getValue(Boolean.class);
System.out.println(result);
// evaluates to true
result = parser.parseExpression("true or false").getValue(Boolean.class);
System.out.println(result);
// evaluates to false
result = parser.parseExpression("!true").getValue(Boolean.class);
System.out.println(result);
}
}
輸出
true true false
Spring SpEL - 數學運算子
SpEL 表示式支援數學運算子,如 +、-、* 等。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
MainApp.java - 執行和測試的主應用程式。
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
// evaluates to 5
int result = parser.parseExpression("3 + 2").getValue(Integer.class);
System.out.println(result);
// evaluates to 1
result = parser.parseExpression("3 - 2").getValue(Integer.class);
System.out.println(result);
// evaluates to 6
result = parser.parseExpression("3 * 2").getValue(Integer.class);
System.out.println(result);
// evaluates to 1
result = parser.parseExpression("3 / 2").getValue(Integer.class);
System.out.println(result);
// evaluates to 1
result = parser.parseExpression("3 % 2").getValue(Integer.class);
System.out.println(result);
// follow operator precedence, evaluate to -9
result = parser.parseExpression("1+2-3*4").getValue(Integer.class);
System.out.println(result);
}
}
輸出
5 1 6 1 1 -9
Spring SpEL - 賦值運算子
SpEL 表示式支援使用 setValue() 方法以及賦值運算子來賦值屬性。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工物件。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
public class Employee {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
Employee employee = new Employee();
EvaluationContext employeeContext = new StandardEvaluationContext(employee);
// Using setValue
parser.parseExpression("name").setValue(employeeContext, "Mahesh");
String result = parser.parseExpression("name").getValue(employeeContext, String.class);
System.out.println(result);
// Using assignment operator
result = parser.parseExpression("Name = 'Robert'").getValue(employeeContext, String.class);
System.out.println(result);
}
}
輸出
Mahesh Robert
Spring SpEL - 三元運算子
SpEL 表示式支援三元運算子來執行 if-then-else 邏輯。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
MainApp.java - 執行和測試的主應用程式。
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
String result = parser.parseExpression("true ? 'Yes' : 'No'").getValue(String.class);
System.out.println(result);
result = parser.parseExpression("false ? 'Yes' : 'No'").getValue(String.class);
System.out.println(result);
}
}
輸出
Yes No
Spring SpEL - Elvis 運算子
SpEL 表示式支援 Elvis 運算子,它是三元運算子的簡寫形式。
// Using ternary operator String result = name != null ? name: "unknown"; // Using Elvis Operator result = name?:"unknown";
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
public class Employee {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
Employee employee = new Employee();
EvaluationContext employeeContext = new StandardEvaluationContext(employee);
// Evaluates to "unknown"
String result = parser.parseExpression("name?:'unknown'").getValue(employeeContext, String.class);
System.out.println(result);
employee.setName("Mahesh");
// Evaluates to "Mahesh"
result = parser.parseExpression("name?:'unknown'").getValue(employeeContext, String.class);
System.out.println(result);
}
}
輸出
unknown Mahesh
Spring SpEL - 安全導航運算子
SpEL 表示式支援安全導航運算子,用於避免 NullPointerException。
int length = parser.parseExpression("name?.length").getValue(context, Integer.class);
如果名稱為 null,則表示式不會丟擲空指標異常。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
public class Employee {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
Employee employee = new Employee();
EvaluationContext employeeContext = new StandardEvaluationContext(employee);
// Evaluates to null but will not throw null pointer exception during parseExpression
String result = parser.parseExpression("name?.strip()").getValue(employeeContext, String.class);
System.out.println(result);
employee.setName(" Mahesh ");
// Evaluates to "Mahesh"
result = parser.parseExpression("name?.strip()").getValue(employeeContext, String.class);
System.out.println(result);
}
}
輸出
null Mahesh
Spring SpEL - 集合選擇
SpEL 表示式支援集合選擇,這是一種非常強大的表示式,允許透過從源集合中選擇條目將源集合轉換為另一個集合。
語法
?[selectionExpresion]
以下示例演示了用法。
List<Employee> list = (List<Employee>)
parser.parseExpression("employees.?[country == 'USA']").getValue(deptContext);
這裡 SpEL 將僅返回員工列表中國家/地區為美國的那些員工。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工類。
Dept.java - 部門類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
public class Employee {
private String name;
private String country;
public Employee(String name, String country) {
this.name = name;
this.country = country;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String toString() {
return "[" +name+ ", "+country + "]";
}
}
以下是 Dept.java 檔案的內容:
package com.tutorialspoint;
import java.util.List;
public class Dept {
private List<Employee> employees;
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
Employee employee1 = new Employee("Robert", "USA");
Employee employee2 = new Employee("Julie", "USA");
Employee employee3 = new Employee("Ramesh", "India");
List<Employee> employees = new ArrayList<Employee>();
employees.add(employee1);
employees.add(employee2);
employees.add(employee3);
Dept dept = new Dept();
dept.setEmployees(employees);
EvaluationContext deptContext = new StandardEvaluationContext(dept);
// Select list of employees who are living in USA
List<Employee> list = (List<Employee>)
parser.parseExpression("employees.?[country == 'USA']").getValue(deptContext);
System.out.println(list);
}
}
輸出
[[Robert, USA], [Julie, USA]]
Spring SpEL - 集合投影
SpEL 表示式支援集合投影,這是一種非常強大的表示式,允許評估子表示式,並最終返回一個新的集合。
語法
![projectionExpresion]
以下示例演示了用法。
List<String> list = (List<String>)
parser.parseExpression("employees.![country]").getValue(deptContext);
這裡 SpEL 將僅返回員工列表中國家/地區為美國的那些員工。
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工類。
Dept.java - 部門類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
public class Employee {
private String name;
private String country;
public Employee(String name, String country) {
this.name = name;
this.country = country;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String toString() {
return "[" +name+ ", "+country + "]";
}
}
以下是 Dept.java 檔案的內容:
package com.tutorialspoint;
import java.util.List;
public class Dept {
private List<Employee> employees;
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
Employee employee1 = new Employee("Robert", "USA");
Employee employee2 = new Employee("Julie", "USA");
Employee employee3 = new Employee("Ramesh", "India");
List<Employee> employees = new ArrayList<Employee>();
employees.add(employee1);
employees.add(employee2);
employees.add(employee3);
Dept dept = new Dept();
dept.setEmployees(employees);
EvaluationContext deptContext = new StandardEvaluationContext(dept);
// Select list of countries
List<String> list = (List<String>)
parser.parseExpression("employees.![country]").getValue(deptContext);
System.out.println(list);
}
}
輸出
[USA, USA, India]
Spring SpEL - 構造器
SpEL 表示式支援使用 new 運算子在表示式中建立物件。我們需要傳遞類的完全限定名稱。
語法
Employee robert = parser.parseExpression("new com.tutorialspoint.Employee('Robert','USA')").getValue(Employee.class);
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工類。
Dept.java - 部門類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
public class Employee {
private String name;
private String country;
public Employee(String name, String country) {
this.name = name;
this.country = country;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String toString() {
return "[" +name+ ", "+country + "]";
}
}
以下是 Dept.java 檔案的內容:
package com.tutorialspoint;
import java.util.List;
public class Dept {
private List<Employee> employees;
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
public String toString() {
return "[" + employees.toString() + "]";
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
List<Employee> employees = new ArrayList<Employee>();
Employee robert = parser.parseExpression("new com.tutorialspoint.Employee('Robert','USA')")
.getValue(Employee.class);
employees.add(robert);
Dept dept = new Dept();
dept.setEmployees(employees);
System.out.println(dept);
EvaluationContext deptContext = new StandardEvaluationContext(dept);
parser.parseExpression("employees.add(new com.tutorialspoint.Employee('Julie','USA'))")
.getValue(deptContext);
System.out.println(dept);
}
}
輸出
[[[Robert, USA]]] [[[Robert, USA], [Julie, USA]]]
Spring SpEL - 變數
SpEL 表示式允許使用 #variable-name 語法建立和使用特定於表示式的變數。變數是使用 EvaluationContext 上的 setVariable 設定的。還有兩種型別的內建變數,#this 和 #root。#this 變數始終引用當前評估物件,而 #root 變數引用評估上下文的根物件。
語法
context.setVariable("newName", "Mahesh Kumar");
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
Employee.java - 員工類。
MainApp.java - 執行和測試的主應用程式。
以下是 Employee.java 檔案的內容:
package com.tutorialspoint;
public class Employee {
private String name;
private String country;
public Employee(String name, String country) {
this.name = name;
this.country = country;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String toString() {
return "[" +name+ ", "+country + "]";
}
}
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException {
ExpressionParser parser = new SpelExpressionParser();
Employee employee = new Employee("Mahesh", "INDIA");
EvaluationContext context = new StandardEvaluationContext(employee);
context.setVariable("newName", "Mahesh Parashar");
parser.parseExpression("Name = #newName").getValue(context);
// Evaluate to "Mahesh Parashar"
System.out.println(employee.getName());
List<Integer> primes = new ArrayList<Integer>();
primes.addAll(Arrays.asList(2,3,5,7,11,13,17));
context.setVariable("primes",primes);
List<Integer> filteredList =
(List<Integer>) parser.parseExpression("#primes.?[#this>10]").getValue(context);
// Evaluate to [11, 13, 17], prime numbers greater than 10
System.out.println(filteredList);
}
}
輸出
Mahesh Parashar [11, 13, 17]
Spring SpEL - 函式
SpEL 表示式允許使用 #function-name 語法建立和使用特定於表示式的函式。函式是使用 EvaluationContext 上的 registerFunction 設定的。
語法
context.registerFunction("reverse", MainApp.class.getDeclaredMethod("reverse", new Class[] { String.class }));
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
MainApp.java - 執行和測試的主應用程式。
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class MainApp {
public static void main(String[] args) throws ParseException, NoSuchMethodException, SecurityException {
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
context.registerFunction("reverse",
MainApp.class.getDeclaredMethod("reverse", new Class[] { String.class }));
String reverseString=parser.parseExpression("#reverse('main')").getValue(context, String.class);
System.out.println(reverseString);
}
public static String reverse(String input) {
StringBuilder backwards = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
backwards.append(input.charAt(input.length() - 1 - i));
}
return backwards.toString();
}
}
輸出
niam
Spring SpEL - 表示式模板
SpEL 表示式允許將文字文字與評估塊混合。每個評估塊都需要正確加字首和字尾。標準選擇是使用 #{ }。org.springframework.expression.common.TemplateParserContextTemplateParserContext 使用相同的語法。
語法
String result = parser.parseExpression("Random number : #{T(java.lang.Math).random()
* 100}", new TemplateParserContext()).getValue(String.class);
以下示例顯示了各種用例。
示例
讓我們更新在Spring SpEL - 建立專案章節中建立的專案。我們新增/更新以下檔案:
MainApp.java - 執行和測試的主應用程式。
以下是 MainApp.java 檔案的內容:
package com.tutorialspoint;
import java.text.ParseException;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.common.TemplateParserContext;
import org.springframework.expression.spel.standard.SpelExpressionParser;
public class MainApp {
public static void main(String[] args) throws ParseException, NoSuchMethodException, SecurityException {
ExpressionParser parser = new SpelExpressionParser();
String result=parser.parseExpression("Random number : #{T(java.lang.Math).random()
* 100}", new TemplateParserContext()).getValue(String.class);
System.out.println(result);
}
}
輸出
Random number : 18.056323318070998