您的位置:首页 > 编程语言 > Java开发

Spring表达式语言:SpEL

2017-09-05 15:47 447 查看
Spring表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言

语法类似于EL:SpEL使用#{...}作为定界符,所有在大括号中的字符都将被认为是SpEL

SpEL为bean的属性进行动态赋值提供了便利

通过SpEL可以实现

   通过bean的id对bean的引用

   调用方法以及引用对象中的属性

  计算表达式的值

  正则表达式的匹配

字面量的表示

-整数:<property name="count" value="#{5}"/>

-小数:<property name ="frequency" value="${89.7}"/>

-科学计数法:<property name="capacity" value="#{1e4}"/>

-String可以使用单引号或者双引号作为字符串的定界符号:

<property name="name" value="#{'Chunk'}"/>或者<property name='name' value='#{"Chuck"}'/>

--Boolean:<property name="enabled" value="#{false}"/>

SpEL:引用Bean、属性和方法(1)

引用其他对象:

<!--通过value属性和SpEL配置Bean之间的应用关系-->

<property name="prefix" value="#{prefixGenerator}"></property>

引用其他对象的属性

<!--通过value属性和SpEL配置suffix属性值为另一个Bean的suffix属性值-->

<property name="suffix" value="#{sequenceGenerator2.suffix}"/>

调用其他对象,还可以链式操作

<!--通过value属性和SpEL配置suffix属性值为另一个Bean的方法的返回值-->

<property name ="suffix" value="#{sequencuGenerator2.toString()}"/>

<!--方法的连缀-->

<property name="suffix" value="#{sequenceGenerator2.toString().toUpperCase()}"/>

SpEL支持的运算符号(1)

算数运算符:+,-,*,/,%,^:

<property name="adjustedAmount" value="#{counter.total+42}"/>

<property name="adjustedAmount" value="#{counter.total-42}"/>

<property name="circumference" value="{2*T(java.lang.Math).PI*circle.radius}"/>

<property name="average" value="#{counter.total/counter.count}"/>

<property nmae="remainder" value="#{counter.total%counter.count}"/>

<property name="area" value="#{T(java.lang.Math).PI*circle.radius^2}"/>

加号还可以用作字符串连接:

<constructor-arg value="#{performer.firstName+' '+performer.lastName}'/>

比较运算符:<,>,==,<=,>=,lt,gt,eq,le,ge

<property name="equal" value="#{counter.total==100}"/>

<property name=hasCapacity" value="#counter.total 1e 10000"/>

逻辑运算符:and,or,not,|

<property name="largeCircle" value="#{shape.kind=='circle' and shape.perimeter gt 1000}"/>

<property name="outOfStock" value="#{!product.available}"/>

<property name="outOfStock" value="#{not product.available}"/>

if-else运算符: ?:(temary),?:(Elvis)

<constructor-arg value="#{songSelector.selectSong()=='Jingle Bells'?piano:' Jingle Bells'}"/>

if-else的变体

<constructor-arg value="#{kenny.song ?: 'Greenleeves'}"/>

正则表达式:matches

<constructor-arg value="#admin.eamil matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-)+\\.[a-zA-Z]{2,4}'}"/>

调用静态方法或静态属性:通过T()调用一个类的静态方法,他将返回一个Class Object,然后再调用相应的方法或属性:

<property name="initValue" value="#{T(java.lang.Math).PI}"></property>

 

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: