欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring實戰(zhàn)之SpEl語法實例詳解

 更新時間:2019年12月12日 08:40:16   作者:cakincqm  
這篇文章主要介紹了Spring實戰(zhàn)之SpEl語法,結(jié)合實例形式分析了SpEl創(chuàng)建數(shù)組、集合及解析變量等相關(guān)操作原理與實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了Spring實戰(zhàn)之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()
   {
   }
   // 初始化全部成員變量的構(gòu)造器
   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)
  {
    // 創(chuàng)建一個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創(chuàng)建數(shù)組-----------
    // 創(chuàng)建一個數(shù)組
    exp = parser.parseExpression(
      "new String[]{'java' , 'Struts' , 'Spring'}");
    System.out.println(exp.getValue());
    // 創(chuàng)建二維數(shù)組
    exp = parser.parseExpression(
      "new int[2][4]");
    System.out.println(exp.getValue());
    System.out.println("---------------------------------------------");
    //------------使用SpEL創(chuàng)建List集合-----------
    exp = parser.parseExpression(
      "{'java' , 'Struts' , 'Spring'}");
    System.out.println(exp.getValue());
    // 創(chuàng)建“二維”List集合
    exp = parser.parseExpression(
      "{{'瘋狂Java講義' , '瘋狂Android講義'}, {'左傳' , '戰(zhàn)國策'}}");
    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);
    // 創(chuàng)建一個EvaluationContext對象,作為SpEL解析變量的上下文
    EvaluationContext ctx = new StandardEvaluationContext();
    // 設(shè)置兩個變量
    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調(diào)用方法-----------
    // 調(diào)用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");
    // 創(chuàng)建一個EvaluationContext對象,作為SpEL解析變量的上下文
    ctx = new StandardEvaluationContext();
    // 設(shè)置一個變量
    ctx.setVariable("mylist" , list);
    // 調(diào)用指定變量所代表的對象的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");
    // 創(chuàng)建一個EvaluationContext對象,作為SpEL解析變量的上下文
    ctx = new StandardEvaluationContext();
    // 設(shè)置一個變量
    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中使用類型運算符-----------
    //調(diào)用Math的靜態(tài)方法
    System.out.println(parser.parseExpression(
      "T(java.lang.Math).random()").getValue());
    //調(diào)用Math的靜態(tài)方法
    System.out.println(parser.parseExpression(
      "T(System).getProperty('os.name')").getValue());
    System.out.println("---------------------------------------------");
    //------------在SpEL中調(diào)用構(gòu)造器-----------
    // 創(chuàng)建對象
    System.out.println(parser.parseExpression(
      "new String('HelloWorld').substring(2, 4)")
      .getValue());
    // 創(chuàng)建對象
    System.out.println(parser.parseExpression(
      "new javax.swing.JFrame('測試')"
      + ".setVisible('true')").getValue());
    System.out.println("---------------------------------------------");
    //------------在SpEL中使用安全導(dǎo)航操作-----------
    // 使用安全操作,將輸出null
    System.out.println("----" + parser.parseExpression(
      "#foo?.bar").getValue());
    // 不使用安全操作,將引發(fā)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("經(jīng)典Java EE企業(yè)應(yīng)用實戰(zhàn)");
    // 創(chuàng)建一個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 ,Double>();
    map.put("Java" , 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("經(jīng)典Java EE企業(yè)應(yīng)用實戰(zhàn)");
    // 創(chuàng)建一個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));
  }
}

三 測試結(jié)果

Hello World
0.23
---------------------------------------------
[Ljava.lang.String;@2c13da15
[[I@77556fd
---------------------------------------------
[java, Struts, Spring]
[[瘋狂Java講義, 瘋狂Android講義], [左傳, 戰(zhàn)國策]]
---------------------------------------------
Spring
80.0
---------------------------------------------
llo
[struts, spring]
---------------------------------------------
瘋狂Java講義
myList長度大于3
---------------------------------------------
0.5577767377702313
Windows 10
---------------------------------------------
ll
null
---------------------------------------------
----null
---------------------------------------------
[瘋狂Java講義, 瘋狂Ajax講義, 經(jīng)典Java EE企業(yè)應(yīng)用實戰(zhàn)]
{Java=89.0, Spring=82.0}
---------------------------------------------
[8, 8, 7, 15]
[孫悟空, 豬八戒, 牛魔王]
---------------------------------------------
我的名字是孫悟空,身高是162
我的名字是豬八戒,身高是182

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Spring框架入門與進階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • springboot配置templates直接訪問的實現(xiàn)

    springboot配置templates直接訪問的實現(xiàn)

    這篇文章主要介紹了springboot配置templates直接訪問的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過程

    Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過程

    Ecppse 使用了 ESP-IDF 中的 Makefile 支持。這意味著您需要從創(chuàng)建 ESP-IDF 項目開始。您可以使用 github 中的 idf-template 項目,接下來通過本文給大家介紹Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過程,感興趣的朋友一起看看吧
    2021-10-10
  • 如何修改logback.xml配置文件在resource以外的位置

    如何修改logback.xml配置文件在resource以外的位置

    這篇文章主要介紹了如何修改logback.xml配置文件在resource以外的位置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java 在Excel單元格中應(yīng)用一種/多種字體樣式(實例代碼)

    Java 在Excel單元格中應(yīng)用一種/多種字體樣式(實例代碼)

    這篇文章主要介紹了Java 在Excel單元格中應(yīng)用一種/多種字體樣式,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot小程序推送信息的項目實踐

    SpringBoot小程序推送信息的項目實踐

    本文主要介紹了SpringBoot小程序推送信息的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2022-04-04
  • 如何使用Spring Boot ApplicationRunner解析命令行中的參數(shù)

    如何使用Spring Boot ApplicationRunner解析命令行中的參數(shù)

    這篇文章主要介紹了使用Spring Boot ApplicationRunner解析命令行中的參數(shù),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-12-12
  • springboot集成shiro自定義登陸過濾器方法

    springboot集成shiro自定義登陸過濾器方法

    這篇文章主要介紹了springboot集成shiro自定義登陸過濾器方法,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 一起聊聊Java中13種鎖的實現(xiàn)方式

    一起聊聊Java中13種鎖的實現(xiàn)方式

    分布式系統(tǒng)時代,線程并發(fā),資源搶占,"鎖"?慢慢變得很重要。那么常見的鎖都有哪些?本文就來和大家聊聊Java中13種鎖的實現(xiàn)方式,感興趣的可以了解一下
    2022-08-08
  • 詳解Java8與Runtime.getRuntime().availableProcessors()

    詳解Java8與Runtime.getRuntime().availableProcessors()

    這篇文章主要介紹了詳解Java8與Runtime.getRuntime().availableProcessors(),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-06-06
  • springboot日期格式化及時差問題分析

    springboot日期格式化及時差問題分析

    這篇文章主要介紹了springboot日期格式化,時差問題,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12

最新評論