1. 程式人生 > 程式設計 >Spring實戰之SpEl語法例項詳解

Spring實戰之SpEl語法例項詳解

本文例項講述了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程式設計有所幫助。