Spring實戰之SpEl語法例項詳解
阿新 • • 發佈:2020-01-07
本文例項講述了Spring實戰之SpEl語法。分享給大家供大家參考,具體如下:
一 Bean
package org.crazyit.app.domain; import java.util.Date; public class Person { private Integer id; private String name; private int height; public Person() { } // 初始化全部成員變數的構造器 public Person(Integer id,String name,int height) { this.id = id; this.name = name; this.height = height; } // id的setter和getter方法 public void setId(Integer id) { this.id = id; } public Integer getId() { return this.id; } // name的setter和getter方法 public void setName(String name) { this.name = name; } public String getName() { return this.name; } // height的setter和getter方法 public void setHeight(int height) { this.height = height; } public int getHeight() { return this.height; } }
二 測試類
package lee; import org.springframework.expression.*; import org.springframework.expression.spel.standard.*; import org.springframework.expression.spel.support.*; import org.springframework.expression.common.TemplateParserContext; import java.util.*; import org.crazyit.app.domain.*; public class SpELTest { public static void main(String[] args) { // 建立一個ExpressionParser物件,用於解析表示式 ExpressionParser parser = new SpelExpressionParser(); // 使用直接量表達式 Expression exp = parser.parseExpression("'Hello World'"); System.out.println(exp.getValue(String.class)); exp = parser.parseExpression("0.23"); System.out.println(exp.getValue(Double.class)); System.out.println("---------------------------------------------"); //------------使用SpEL建立陣列----------- // 建立一個數組 exp = parser.parseExpression( "new String[]{'java','Struts','Spring'}"); System.out.println(exp.getValue()); // 建立二維陣列 exp = parser.parseExpression( "new int[2][4]"); System.out.println(exp.getValue()); System.out.println("---------------------------------------------"); //------------使用SpEL建立List集合----------- exp = parser.parseExpression( "{'java','Spring'}"); System.out.println(exp.getValue()); // 建立“二維”List集合 exp = parser.parseExpression( "{{'瘋狂Java講義','瘋狂Android講義'},{'左傳','戰國策'}}"); System.out.println(exp.getValue()); System.out.println("---------------------------------------------"); //------------使用SpEL訪問List集合、Map集合的元素----------- List<String> list = new ArrayList<String>(); list.add("Java"); list.add("Spring"); Map<String,Double> map = new HashMap<String,Double>(); map.put("Java",80.0); map.put("Spring",89.0); // 建立一個EvaluationContext物件,作為SpEL解析變數的上下文 EvaluationContext ctx = new StandardEvaluationContext(); // 設定兩個變數 ctx.setVariable("mylist",list); ctx.setVariable("mymap",map); // 訪問List集合的第二個元素 System.out.println(parser .parseExpression("#mylist[1]").getValue(ctx)); // 訪問Map集合的指定元素 System.out.println(parser .parseExpression("#mymap['Java']").getValue(ctx)); System.out.println("---------------------------------------------"); //------------使用SpEL呼叫方法----------- // 呼叫String物件的substring()方法 System.out.println(parser .parseExpression("'HelloWorld'.substring(2,5)") .getValue()); list = new ArrayList<String>(); list.add("java"); list.add("struts"); list.add("spring"); list.add("hibernate"); // 建立一個EvaluationContext物件,作為SpEL解析變數的上下文 ctx = new StandardEvaluationContext(); // 設定一個變數 ctx.setVariable("mylist",list); // 呼叫指定變數所代表的物件的subList()方法 System.out.println(parser .parseExpression("#mylist.subList(1,3)").getValue(ctx)); System.out.println("---------------------------------------------"); //------------在SpEL中使用運算子----------- list = new ArrayList<String>(); list.add("java"); list.add("struts"); list.add("spring"); list.add("hibernate"); // 建立一個EvaluationContext物件,作為SpEL解析變數的上下文 ctx = new StandardEvaluationContext(); // 設定一個變數 ctx.setVariable("mylist",list); // 對集合的第一個元素進行賦值 parser.parseExpression("#mylist[0]='瘋狂Java講義'") .getValue(ctx); // 下面將輸出 瘋狂Java講義 System.out.println(list.get(0)); // 使用三目運算子 System.out.println(parser.parseExpression("#mylist.size()>3?" + "'myList長度大於3':'myList長度不大於3'") .getValue(ctx)); System.out.println("---------------------------------------------"); //------------在SpEL中使用型別運算子----------- //呼叫Math的靜態方法 System.out.println(parser.parseExpression( "T(java.lang.Math).random()").getValue()); //呼叫Math的靜態方法 System.out.println(parser.parseExpression( "T(System).getProperty('os.name')").getValue()); System.out.println("---------------------------------------------"); //------------在SpEL中呼叫構造器----------- // 建立物件 System.out.println(parser.parseExpression( "new String('HelloWorld').substring(2,4)") .getValue()); // 建立物件 System.out.println(parser.parseExpression( "new javax.swing.JFrame('測試')" + ".setVisible('true')").getValue()); System.out.println("---------------------------------------------"); //------------在SpEL中使用安全導航操作----------- // 使用安全操作,將輸出null System.out.println("----" + parser.parseExpression( "#foo?.bar").getValue()); // 不使用安全操作,將引發NullPointerException // System.out.println(parser.parseExpression( // "#foo.bar").getValue()); System.out.println("---------------------------------------------"); //------------在SpEL中對集合進行選擇----------- list = new ArrayList<String>(); list.add("瘋狂Java講義"); list.add("瘋狂Ajax講義"); list.add("瘋狂iOS講義"); list.add("經典Java EE企業應用實戰"); // 建立一個EvaluationContext物件,作為SpEL解析變數的上下文 ctx = new StandardEvaluationContext(); ctx.setVariable("mylist",list); // 判斷集合元素length()方法的長度大於7,“瘋狂iOS講義”被剔除 Expression expr = parser.parseExpression ("#mylist.?[length()>7]"); System.out.println(expr.getValue(ctx)); map = new HashMap<String,89.0); map.put("Spring",82.0); map.put("英語",75.0); ctx.setVariable("mymap",map); // 判斷Map集合的value值大於80,只保留前面2個Entry expr = parser.parseExpression ("#mymap.?[value>80]"); System.out.println(expr.getValue(ctx)); System.out.println("---------------------------------------------"); //------------在SpEL中對集合進行投影----------- list = new ArrayList<String>(); list.add("瘋狂Java講義"); list.add("瘋狂Ajax講義"); list.add("瘋狂iOS講義"); list.add("經典Java EE企業應用實戰"); // 建立一個EvaluationContext物件,作為SpEL解析變數的上下文 ctx = new StandardEvaluationContext(); ctx.setVariable("mylist",list); // 得到的新集合的元素是原集合的每個元素length()方法返回值 expr = parser.parseExpression ("#mylist.![length()]"); System.out.println(expr.getValue(ctx)); List<Person> list2 = new ArrayList<Person>(); list2.add(new Person(1,"孫悟空",162)); list2.add(new Person(2,"豬八戒",182)); list2.add(new Person(3,"牛魔王",195)); ctx.setVariable("mylist2",list2); // 得到的新集合的元素是原集合的每個元素name屬性值 expr = parser.parseExpression ("#mylist2.![name]"); System.out.println(expr.getValue(ctx)); System.out.println("---------------------------------------------"); //------------在SpEL中使用表示式模板----------- Person p1 = new Person(1,162); Person p2 = new Person(2,182); expr = parser.parseExpression( "我的名字是#{name},身高是#{height}",new TemplateParserContext()); // 將使用p1物件name、height填充上面表示式模板中的#{} System.out.println(expr.getValue(p1)); // 將使用p2物件name、height填充上面表示式模板中的#{} System.out.println(expr.getValue(p2)); } }
三 測試結果
Hello World
0.23
---------------------------------------------
[Ljava.lang.String;@2c13da15
[[I@77556fd
---------------------------------------------
[java,Struts,Spring]
[[瘋狂Java講義,瘋狂Android講義],[左傳,戰國策]]
---------------------------------------------
Spring
80.0
---------------------------------------------llo
[struts,spring]
---------------------------------------------
瘋狂Java講義
myList長度大於3
---------------------------------------------
0.5577767377702313
Windows 10
---------------------------------------------
ll
null
---------------------------------------------
----null
---------------------------------------------
[瘋狂Java講義,瘋狂Ajax講義,經典Java EE企業應用實戰]
{Java=89.0,Spring=82.0}
---------------------------------------------
[8,8,7,15]
[孫悟空,豬八戒,牛魔王]
---------------------------------------------
我的名字是孫悟空,身高是162
我的名字是豬八戒,身高是182
更多關於java相關內容感興趣的讀者可檢視本站專題:《Spring框架入門與進階教程》、《Java資料結構與演算法教程》、《Java操作DOM節點技巧總結》、《Java檔案與目錄操作技巧彙總》和《Java快取操作技巧彙總》
希望本文所述對大家java程式設計有所幫助。