Spring-表達式語言
概念及作用
Spring表達式語言全稱為“Spring Expression Language”,縮寫為“SPEL”,類似於Struts2x中使用的OGNL表達式語言,能在運行時構建復雜表達式、存取對象圖屬性對象方法調用 等等,並且能與Spring功能完美整合,如能用來配置Bean定義。
表達式語言給靜態Java語言增加了動態功能。
SPEL是單獨模塊,只依賴於core模塊,不依賴於其他模塊,可以單獨使用。
支持形式(不區分大小寫):
一、基本表達式:字面量表達式、關系,邏輯與算數運算表達式、字符串連接及截取表達式、三目運算及Elivis表達式、正則表達式、括號優先級表達式;
二、類相關表達式:
三、集合相關表達式:內聯List、內聯數組、集合,字典訪問、列表,字典,數組修改、集合投影、集合選擇;不支持多維內聯數組初始化;不支持內聯字典定義;
四、其他表達式:模板表達式。
測試實例:
public class SpelTest {
@Test
public void spelTest(){
ExpressionParser expressionParser = new SpelExpressionParser();
ParserContext parserContext = new ParserContext() {
@Override
public boolean isTemplate() {
return true;
}
@Override
public String getExpressionPrefix() { //前綴表達式
return "#{";
}
@Override
public String getExpressionSuffix() { //後綴表達式
return "}";
}
};
String template = "#{‘Hello ‘}#{‘abl ‘}#{‘World!‘}"; //表達式
Expression expression = expressionParser.parseExpression(template, parserContext);
//註 必須完全匹配
Assert.assertEquals("Hello abl World!", expression.getValue());
}
}
註:默認傳入的字符串表達式不是模板形式
2)EvaluationContext接口: 表示上下文環境,默認實現是org.springframework.expression.spel.support包中的 StandardEvaluationContext類,使用setRootObject方法來設置根對象,使用setVariable方法來註冊自定義 變量,使用registerFunction來註冊自定義函數等等。
3)Expression接口:表示表達式對象,默認實現是org.springframework.expression.spel.standard包中的SpelExpression,提供getValue方法用於獲取表達式值,提供setValue方法用於設置對象值。
SpEL語法:
String str1 = parser.parseExpression("‘Hello World!‘").getValue(String.class);
String str2 = parser.parseExpression("\"Hello World!\"").getValue(String.class);
加減乘除
int result1 = parser.parseExpression("1+2-3*4/2").getValue(Integer.class);//-3
關系表達
等 於(==)、不等於(!=)、大於(>)、大於等於(>=)、小於(<)、小於等於(<=),區間(between)運算
邏輯表達式:
且(and)、或(or)、非(!或NOT)。
String expression2 = "2>1 and (NOT true or NOT false)";
boolean result2 = parser.parseExpression(expression2).getValue(boolean.class); Assert.assertEquals(true, result2);
字符串連接及截取表達式:使用“+”進行字符串連接
三目運算符 “表達式1?表達式2:表達式3”用於構造三目運算表達式,如“2>1?true:false”將返回true;
正則表達式:使用“str matches regex,如“‘123‘ matches ‘\\d{3}‘”將返回true;
括號優先級表達式:使用“(表達式)”構造,括號裏的具有高優先級。
類相關表達式
這塊東西實在太枯燥了,沒有意思,不寫了
Spring-表達式語言