Spring – Spring EL 表达式使用说明
简介
Spring的表达式语言,简称SpELl,是一个支持运行时检查和操作对象图的强大的表达式语言,和我们之前学习过的JSP中的EL表达式类似,SPEL使用的是#{}作为定界符,所有在大括号中的字符都被认为的SPEL,SPEL为bean的属性进行动态赋值提供了非常大的便利
SpEL基本使用
字符串注入
直接输入字面量,如字符串,数字等,但意义不大
@Value("spring boot")
private String spring;
读系统配置变量
@Value("#{systemProperties['os.name']}")
private String osName;
输出是PC的操作系统,例如Windows 10,他能获取系统的属性值
调用类的方法
@Value("#{T(Math).random()*100}")
private Integer random;
其中的 T() 表示要调用的Java包中的类,调用类需要包含在T()中
获取类的属性
假如需要获取的对象,在Spring Bean中存储管理时,可以直接通过获取该对象中的值,前提是,该对象要存在get方法
@Value("#{bean.prop}")
private String test;
链式调用方法
可以像执行代码那样调用类的方法,还可以链式调用
@Value("#{stringProp.substring(1).toUpperCase()}")
private String test;
stringProp 有抛 Null 的可能,如果真为 Null 确实是会抛出 空指针异常,但 SpEL 支持可选语法 ?.
@Value("#{stringProp?.substring(1)?.toUpperCase()}")
private String test;
当stringProp不为空时,则调用,为空时则不调用
?号的作用就是在调用方法之前,先判断结果是不是null值,如果是则直接返回null,如果不是,才会继续调用后面的方法.
算术运算
@Value("#{(1+2)>3}")
private boolean test;
三元运算符
@Value("#{(1+2)>3 ? true : false}")
private boolean test;
elvis 运算符
elvis 运算符支持默认值语法 ?:
@Value("#{person.getName() ?: 'zhangsan'}")
private String pName;
当 getName() 不能获取数据时,则默认填充 zhangsan
@Value("#{personList.list[2]}")
private Person person;
获取 ArrayList 对象的下标值
@Value("#{mapProp.map[key1]}")
private String value;
获取 Map 对象的对应 key 的值
@Value("#{personList.list.?[age==19]}")
private List<Person> person;
获取 ArrayList 对象中的成员中的 age 为 19 的对象,并取出来形成新的List对象
其中 .?[] 是查询所有,而 .^[] 是查询第一个,满足条件的, .$[] 是查询最后一个满足条件的.
@Value("#{personList.list.![pName]}")
private List<String> pNames;
使用 .![] 进行集合投影,将Person集合中的pName属性都拿了出来,并且塞到了一个新的集合之中
读取配置文件
假如在Spring中存在 applicarion.yml 配置文件,可以通过以下方法读取到值
@Value("${book.name}")
private String normal;
共有 0 条评论