在SpringBoot环境中合理的使用SpEL表达式,提高编码效率

原创
2020/06/24 17:08
阅读数 1.6K



Spring Expression Language (SpEL)是一种功能非常强大的表达式语言,可用于在运行时查询和操作对象。 SpEL书写在XML配置文件或者Annotation注解上,在Spring Bean的创建过程中生效。

在这篇文章中,给大家介绍一下在Spring Boot中SpEL表达式的基本常用用法。

一、创建Spring Boot应用

首先,需要创建一个简单的Spring Boot应用,这个过程在我以往的文章中均有介绍,这里不做过多的赘述。然后创建一个配置文件employee.properties,内容如下:


  • 上文中names和type属性分别代表雇员employee的名字和分类,是字符串类型属性

  • age属性代表雇员的年龄,是一组键值对、类对象数据结构

创建一个配置类 EmployeeConfig ,代码如下:


二、SpEL结合@Value注解读取配置文件属性


本小节我们结合@Value注解读取配置文件的相关属性。@Value注解可以将属性值注入到由Spring 管理的Bean中。

@Value ("#{'${employee.names}'.split(',')}")
private List

上面的例子中,我们使用SpEL表达式读取了employee.names属性,并将其从字符串属性,以逗号为分隔符转换为List类型。属性值注入完成之后,employeeNames=[张三,李四,王五,赵六]

假如我们需要获取第一位(数组下标从0开始)雇员的姓名,可以使用如下的SpEL表达式:

@Value ("#{'${employee.names}'.split(',')[0]}")
 private String firstEmployeeName;

属性值注入完成之后,firstEmployeeName=‘’张三‘’

我们还可以使用@Value注解将键值对、类对象的数据结构转换为java的Map数据类型

@Value ("#{${employee.age}}")
 private Map

加入我们需要根据Map的Key获取Value属性,可以使用如下的SpEL表达式:

@Value ("#{${employee.age}.two}")
private String employeeAgeTwo;

如果我们不确定,Map中的某个key是否存在,可以使用如下的SpEL表达式。如果key存在就获取对应的value,如果不存在就获得默认值31

@Value ("#{${employee.age}['five'] ?: 31}") 
private Integer ageWithDefaultValue;

三、SpEL结合 @Value注解读取系统环境变量


还可以使用SpEL表达式读取系统环境变量,示例如下,获取JAVA_HOME目录:

@Value ("#{systemProperties['java.home']}") 
private String javaHome;

同理,可以获取系统用户工作目录

@Value ("#{systemProperties['user.dir']}") 
private String userDir;

当然,除了以上在Spring Boot中使用SpEL的常用用法,SpEL还可以完成算术运算、逻辑运算、正则匹配运算、条件运算等功能。建议大家参照官方文档学习。

写在最后

通过搜-suo-查询“字母哥博客”,更多精品知识等待你!

本号只做持续的知识输出,希望您能关注、评论、转发!您的支持是我不竭的创作动力!让知识产生价值、让程序员改变世界!

本文分享自微信公众号 - 字母哥课堂(zimug_blog)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部