spring表达式SpringEL

注意Spring表达式使用的是#{"xxx"},而不是${"xxx"}。${"xxx"}主要用来解析properties、yml文件的,而spring表达式#{"xxx"}是用来解析bean的,二者请勿混淆。本篇,我们介绍的是spring表达式,也就是 #{"xxx"}  。 

SpringEL是spring3里面的东东,不是spring4,也不是springboot,更不是springcloud中的东东。

参考文章 :

https://www.cnblogs.com/best/p/5748105.html

https://blog.csdn.net/zhoucheng05_13/article/details/54603985

Spring3引入了Spring表达式语言(Spring Expression Language,SpEL),它能够以一种强大和简介的方式将值装配到bean属性和构造器参数中。SpEL拥有很多特性,包括:
a、使用bean的ID来引用bean;
b、调用方法和访问对象的属性;
c、对值进行算数、关系和逻辑运算;
d、正则表达式匹配;
e、集合操作。

等。。。

 

废话不多讲了,我们来直接看个例子。

一个Person 实体类、一个UserBean  bean 。 

Person.java

package com.tingcream.springdemo.model;public class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person() {super();}public Person(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}}

UserBean.java 

package com.tingcream.springdemo.model;import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.springframework.stereotype.Component;@Component
public class UserBean {private String name="张三";private  List hobbies=Arrays.asList(new String[] {"basketball","volleyball","football"});private int   grade=80;private List persons;private Map  map ;{map=new HashMap();map.put("aa", "hello world");map.put("bb", 110);persons=new ArrayList();persons.add(new Person("张三",23));persons.add(new Person("李四",24));persons.add(new Person("王五",25));persons.add(new Person("陈六",26));persons.add(new Person("田七",27));persons.add(new Person("胡八",28));}public String getName() {return name;}public void setName(String name) {this.name = name;}public List getHobbies() {return hobbies;}public void setHobbies(List hobbies) {this.hobbies = hobbies;}public Map getMap() {return map;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}public void setMap(Map map) {this.map = map;}public List getPersons() {return persons;}public void setPersons(List persons) {this.persons = persons;}@Overridepublic String toString() {return "UserBean [name=" + name + ", hobbies=" + hobbies + ", grade=" + grade + ", persons=" + persons+ ", map=" + map + "]";}}

SpringStartupListener.java  

package com.tingcream.springdemo.common;import java.util.List;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import com.tingcream.springdemo.model.Person;
import com.tingcream.springdemo.model.UserBean;@Component
public class SpringStartupListener implements ApplicationListener {@Value("#{userBean.getName()}")//springEL调用bean的方法,使用#{userBean.name}亦可private String name;@Value("#{userBean.hobbies}")//springEL注入bean的集合属性,可用List或数组接收private List hobbies;@Value("#{userBean}")//直接注入整个bean对象,相当于@AutoWired注入一个beanprivate UserBean userBean;@Value("#{userBean.hobbies[0]}")//注入bean的部分属性、索引private String hobby0;//正则   matchs@Value("#{'asdf' matches '[a-zA-Z0-9]{1,20}'}")//springEL中还可以使用正则表达式private boolean  f;@Value("#{userBean.map['aa']}")private  String aa ;@Value("#{userBean.map['bb']}")private  String bb ;@Value("#{userBean.grade + 10}") //springEL中还可以进行算术运算private  int   grade2;@Value("#{userBean.hobbies[T(java.lang.Math).random()*userBean.hobbies.size()]}") //springEL中还可以调用类的静态方法,或bean的方法private String hobby;//筛选子集合//  #{persons.?[age gt 20]}//  gt  lt  eq  == > <   >= <=  //  .?[age > 25]  筛选出age大于25的所有person//  .^[age > 25]  筛选出age大于25的第一个person//  .$[age > 25]  筛选出age大于25的最后一个person@Value("#{userBean.persons.?[age >= 25]}")private  List personList1;//投影  persons.![name + ', ' + age]@Value("#{userBean.persons.![name]}")private List personNames;@Value("#{userBean.persons.![name+','+age]}")private List nameAges;@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {System.out.println("======== SpringStartupListener初始化============");System.out.println(name);System.out.println(hobbies);System.out.println(userBean);System.out.println("是否匹配:"+f);System.out.println("hobby0:"+hobby0);System.out.println("aa:"+aa);System.out.println("bb:"+bb);System.out.println("grade2:"+grade2);System.out.println("hobby:"+hobby);System.out.println("================");System.out.println("personList1:");for( Person p: personList1 ) {System.out.println(p);}System.out.println("================");System.out.println("personNames:");for( String s: personNames ) {System.out.println(s);}System.out.println("================");System.out.println("nameAges:");for( String a: nameAges ) {System.out.println(a);}}}

 启动springboot应用,观察控制台输出 :

 

======== SpringStartupListener初始化============
张三
[basketball, volleyball, football]
UserBean [name=张三, hobbies=[basketball, volleyball, football], grade=80, persons=[Person [name=张三, age=23], Person [name=李四, age=24], Person [name=王五, age=25], Person [name=陈六, age=26], Person [name=田七, age=27], Person [name=胡八, age=28]], map={aa=hello world, bb=110}]
是否匹配:true
hobby0:basketball
aa:hello world
bb:110
grade2:90
hobby:basketball
================
personList1:
Person [name=王五, age=25]
Person [name=陈六, age=26]
Person [name=田七, age=27]
Person [name=胡八, age=28]
================
personNames:
张三
李四
王五
陈六
田七
胡八
================
nameAges:
张三,23
李四,24
王五,25
陈六,26
田七,27
胡八,28

 

ok~~

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部