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
语法类似于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
相关文章推荐
- Spring表达式语言SpEL
- Spring3表达式语言(SpEL)学习笔记
- spring spel表达式语言
- Spring表达式语言 之 5.3 SpEL语法
- SpEL(Spring Expression Language)表达式语言
- Spring表达式语言(Spring Expression Language,SpEL)
- 【第五章】Spring表达式语言 之 5.1 概述 5.2 SpEL基础 ——跟我学spring3
- spring表达式语言spel
- Spring 表达式语言 (Spring Expression Language) SpEL
- Spring 框架参考文档(三)之表达式语言 (SpEL)
- 7 -- Spring的基本用法 -- 12... Spring 3.0 提供的表达式语言(SpEL)
- Spring_表达式语言SpEl
- Spring Expression Language(SpEL) spring表达式语言
- Spring3.1——Spring表达式语言SpEL
- Spring表达式语言(SpEL)
- Spring表达式语言:SpEL
- Spring表达式语言之SpEL
- spring表达式语言(SpEL)简述及Hello World示例
- (六)Spring表达式语言SpEl
- 【第五章】Spring表达式语言 之 5.1 概述 5.2 SpEL基础 ——跟我学spring3