Spring實(shí)戰(zhàn)之SpEl語(yǔ)法實(shí)例詳解
本文實(shí)例講述了Spring實(shí)戰(zhàn)之SpEl語(yǔ)法。分享給大家供大家參考,具體如下:
一 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;
}
}
二 測(cè)試類
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)建一個(gè)ExpressionParser對(duì)象,用于解析表達(dá)式
ExpressionParser parser = new SpelExpressionParser();
// 使用直接量表達(dá)式
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)建一個(gè)數(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)國(guó)策'}}");
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)建一個(gè)EvaluationContext對(duì)象,作為SpEL解析變量的上下文
EvaluationContext ctx = new StandardEvaluationContext();
// 設(shè)置兩個(gè)變量
ctx.setVariable("mylist" , list);
ctx.setVariable("mymap" , map);
// 訪問List集合的第二個(gè)元素
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對(duì)象的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)建一個(gè)EvaluationContext對(duì)象,作為SpEL解析變量的上下文
ctx = new StandardEvaluationContext();
// 設(shè)置一個(gè)變量
ctx.setVariable("mylist" , list);
// 調(diào)用指定變量所代表的對(duì)象的subList()方法
System.out.println(parser
.parseExpression("#mylist.subList(1, 3)").getValue(ctx));
System.out.println("---------------------------------------------");
//------------在SpEL中使用運(yùn)算符-----------
list = new ArrayList<String>();
list.add("java");
list.add("struts");
list.add("spring");
list.add("hibernate");
// 創(chuàng)建一個(gè)EvaluationContext對(duì)象,作為SpEL解析變量的上下文
ctx = new StandardEvaluationContext();
// 設(shè)置一個(gè)變量
ctx.setVariable("mylist" , list);
// 對(duì)集合的第一個(gè)元素進(jìn)行賦值
parser.parseExpression("#mylist[0]='瘋狂Java講義'")
.getValue(ctx);
// 下面將輸出 瘋狂Java講義
System.out.println(list.get(0));
// 使用三目運(yùn)算符
System.out.println(parser.parseExpression("#mylist.size()>3?"
+ "'myList長(zhǎng)度大于3':'myList長(zhǎng)度不大于3'")
.getValue(ctx));
System.out.println("---------------------------------------------");
//------------在SpEL中使用類型運(yùn)算符-----------
//調(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)建對(duì)象
System.out.println(parser.parseExpression(
"new String('HelloWorld').substring(2, 4)")
.getValue());
// 創(chuàng)建對(duì)象
System.out.println(parser.parseExpression(
"new javax.swing.JFrame('測(cè)試')"
+ ".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中對(duì)集合進(jìn)行選擇-----------
list = new ArrayList<String>();
list.add("瘋狂Java講義");
list.add("瘋狂Ajax講義");
list.add("瘋狂iOS講義");
list.add("經(jīng)典Java EE企業(yè)應(yīng)用實(shí)戰(zhàn)");
// 創(chuàng)建一個(gè)EvaluationContext對(duì)象,作為SpEL解析變量的上下文
ctx = new StandardEvaluationContext();
ctx.setVariable("mylist" , list);
// 判斷集合元素length()方法的長(zhǎng)度大于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("英語(yǔ)" , 75.0);
ctx.setVariable("mymap" , map);
// 判斷Map集合的value值大于80,只保留前面2個(gè)Entry
expr = parser.parseExpression
("#mymap.?[value>80]");
System.out.println(expr.getValue(ctx));
System.out.println("---------------------------------------------");
//------------在SpEL中對(duì)集合進(jìn)行投影-----------
list = new ArrayList<String>();
list.add("瘋狂Java講義");
list.add("瘋狂Ajax講義");
list.add("瘋狂iOS講義");
list.add("經(jīng)典Java EE企業(yè)應(yīng)用實(shí)戰(zhàn)");
// 創(chuàng)建一個(gè)EvaluationContext對(duì)象,作為SpEL解析變量的上下文
ctx = new StandardEvaluationContext();
ctx.setVariable("mylist" , list);
// 得到的新集合的元素是原集合的每個(gè)元素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);
// 得到的新集合的元素是原集合的每個(gè)元素name屬性值
expr = parser.parseExpression
("#mylist2.![name]");
System.out.println(expr.getValue(ctx));
System.out.println("---------------------------------------------");
//------------在SpEL中使用表達(dá)式模板-----------
Person p1 = new Person(1, "孫悟空" , 162);
Person p2 = new Person(2, "豬八戒" , 182);
expr = parser.parseExpression(
"我的名字是#{name},身高是#{height}"
, new TemplateParserContext());
// 將使用p1對(duì)象name、height填充上面表達(dá)式模板中的#{}
System.out.println(expr.getValue(p1));
// 將使用p2對(duì)象name、height填充上面表達(dá)式模板中的#{}
System.out.println(expr.getValue(p2));
}
}
三 測(cè)試結(jié)果
Hello World
0.23
---------------------------------------------
[Ljava.lang.String;@2c13da15
[[I@77556fd
---------------------------------------------
[java, Struts, Spring]
[[瘋狂Java講義, 瘋狂Android講義], [左傳, 戰(zhàn)國(guó)策]]
---------------------------------------------
Spring
80.0
---------------------------------------------
llo
[struts, spring]
---------------------------------------------
瘋狂Java講義
myList長(zhǎng)度大于3
---------------------------------------------
0.5577767377702313
Windows 10
---------------------------------------------
ll
null
---------------------------------------------
----null
---------------------------------------------
[瘋狂Java講義, 瘋狂Ajax講義, 經(jīng)典Java EE企業(yè)應(yīng)用實(shí)戰(zhàn)]
{Java=89.0, Spring=82.0}
---------------------------------------------
[8, 8, 7, 15]
[孫悟空, 豬八戒, 牛魔王]
---------------------------------------------
我的名字是孫悟空,身高是162
我的名字是豬八戒,身高是182
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Spring框架入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
springboot配置templates直接訪問的實(shí)現(xiàn)
這篇文章主要介紹了springboot配置templates直接訪問的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過(guò)程
Ecppse 使用了 ESP-IDF 中的 Makefile 支持。這意味著您需要從創(chuàng)建 ESP-IDF 項(xiàng)目開始。您可以使用 github 中的 idf-template 項(xiàng)目,接下來(lái)通過(guò)本文給大家介紹Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過(guò)程,感興趣的朋友一起看看吧2021-10-10
如何修改logback.xml配置文件在resource以外的位置
這篇文章主要介紹了如何修改logback.xml配置文件在resource以外的位置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Java 在Excel單元格中應(yīng)用一種/多種字體樣式(實(shí)例代碼)
這篇文章主要介紹了Java 在Excel單元格中應(yīng)用一種/多種字體樣式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
SpringBoot小程序推送信息的項(xiàng)目實(shí)踐
本文主要介紹了SpringBoot小程序推送信息的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
如何使用Spring Boot ApplicationRunner解析命令行中的參數(shù)
這篇文章主要介紹了使用Spring Boot ApplicationRunner解析命令行中的參數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-12-12
springboot集成shiro自定義登陸過(guò)濾器方法
這篇文章主要介紹了springboot集成shiro自定義登陸過(guò)濾器方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
詳解Java8與Runtime.getRuntime().availableProcessors()
這篇文章主要介紹了詳解Java8與Runtime.getRuntime().availableProcessors(),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06

