SpEL:Spring表达式语言

概述

  • Spring表达式语言(简称SpEL):它是一个支持在运行时查询和操作对象图的强大的表达式语言
  • SpEL使用#{...}作为定界符,所有在花括号中的字符都被认为是SpEL
  • 可以使用SpEL动态地为bean的属性进行赋值
  • 通过SpEL可以实现:
    • 通过bean的id对bean进行引用
    • 访问对象的属性以及调用对象的方法
    • 计算表达式的值
    • 正则表达式的匹配

SpEL:字面值

可以使用SpEL给bean的属性赋字面值:

  • 整数:
    • <property name="age" value="#{28}" />
  • 小数:
    • <property name="price" value="#{12.34}" />
  • 科学计数法:
    • <property name="capacity" value="1e4" />
  • 字符串(字符串需要使用单引号或双引号包围起来):
    • <property name="name" value="#{'Tim'}" />
    • <property name="name" value='#{"Tim"}' />
  • 布尔类型:
    • <property name="enable" value="#{false}" />

SpEL:引用bean、属性和方法

  • 引用其他对象:
    • 可以通过bean的id对bean进行引用
    • <property name="prefix" value="#{prefixGenerator}" />等价于
      <property name="prefix" ref="prefixGenerator" />
  • 引用其他对象的属性:
    • <property name="prefix" value="#{config.prefix}" />
  • 调用其他对象的方法,还可以进行链式操作
    • <property name="prefix" value="#{prefixGenerator.getPrefix()}" />
    • <property name="prefix" value="#{config.toString().toUpperCase()}" />

SpEL支持的运算符

  • 算数运算符(+、-、*、/、%、^)
  • 加号还可以用作字符串连接
  • 比较运算符(<、>、<=、>=、==、lt、gt、eq、le、ge)
  • 逻辑运算符(and、or、not、|)
  • if-else运算符(condition ? value1 : value2)
  • 正则表达式(matches)
    • <constructor-arg value="#{person.name matches '[a-zA-z]+'}" />
  • 调用静态方法或静态属性
    • 通过T()调用一个类的静态方法或静态属性,它返回一个Class类型的对象,然后再调用相应的方法或属性:
      • <property name="initValue" value="#{T(java.lang.Math).PI}" />

感谢浏览tim chow的作品!

如果您喜欢,可以分享到: 更多

如果您有任何疑问或想要与tim chow进行交流

可点此给tim chow发信

如有问题,也可在下面留言: