Spring表示式實現變數替換
阿新 • • 發佈:2018-11-13
SpEL簡介與功能特性
Spring表示式語言(簡稱SpEL)是一個支援查詢並在執行時操縱一個物件圖的功能強大的表示式語言。SpEL語言的語法類似於統一EL,但提供了更多的功能,最主要的是顯式方法呼叫和基本字串模板函式。
參考:https://www.cnblogs.com/best/p/5748105.html
在Maven 專案新增依賴
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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.SpEl</groupId> <artifactId>Spring053</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>Spring053</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.3.0.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> <version>4.10</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.2.4</version> </dependency> </dependencies> </project>
變數與賦值
變數:變數可以在表示式中使用語法#’變數名’引用
ExpressionParser ep= new SpelExpressionParser();
//建立上下文變數
EvaluationContext ctx = new StandardEvaluationContext();
ctx.setVariable(“name”, “Hello”);
System.out.println(ep.parseExpression("#name").getValue(ctx));
輸出:Hello
賦值:屬性設定是通過使用賦值運算子。這通常是在呼叫setValue中執行但也可以在呼叫getValue內,也可通過”#varName=value”的形式給變數賦值。
System.out.println(ep.parseExpression("#name='Ryo'").getValue(ctx));
輸出:Ryo
實現一個變數替換的例子
給兩個變數alarmTime、location賦值,最後用一個含有其它字串的表示式中,實際輸出變數的真實值
public class SpelTest { public static void main(String[] args) { ExpressionParser ep = new SpelExpressionParser(); // 建立上下文變數 EvaluationContext ctx = new StandardEvaluationContext(); ctx.setVariable("alarmTime", "2018-09-26 13:00:00"); ctx.setVariable("location", "二樓201機房"); System.out.println(ep.parseExpression("告警發生時間 #{#alarmTime},位置是在#{#location}", new TemplateParserContext()).getValue(ctx)); } }
執行main方法,結果輸出告警發生時間 2018-09-26 13:00:00,位置是在二樓201機房