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

成功啟動後,如果一切正常,則應顯示以下結果:

Eclipse Home page

設定 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
廣告

© . All rights reserved.