Spring学习记录(七)---表达式语言-SpEL

SpEL---Spring Expression Language:是一个支持运行时查询和操作对象图表达式语言、使用#{...}作为定界符,为bean属性动态赋值提供了便利。

对于普通的赋值,用SpEL也可以,但意义不大,如:

1  整数:<property name="count" value="#{5}">
2  小数:<property name="frequency" value="#{89.5}">
3  字符串:<property name="name" value="#{"Evan"}"> //要用引号引起来
4  布尔值:<property name="enabled" value="#{false}">

 ②引用Bean、属性和方法

 1 <bean id="car" class="com.guigu.spring.autowire.Car"
 2     p:brand="Audi" p:price="200000"></bean>
 3   <!--引用其他对象-- ,相当于 ref="">
 4 <bean id="person" class="com.guigu.spring.autowire.Person"
 5     p:name="Tom" p:car="#{car}"></bean>
 6   <!--引用其他对象的属性-->
 7 <bean id="car2" class="com.guigu.spring.autowire.Car"
 8     p:brand="Baoma" p:price="#{car.price}"></bean>
 9   <!--引用其他对象的方法,还可以链式操作-->
10  <bean id="car3" class="com.guigu.spring.autowire.Car" p:toString="#{car.toString()}">
11  <bean id="car3" class="com.guigu.spring.autowire.Car" p:toString="#{car.toString().toUpperCase()}">

 支持运算符号

 算数运算符:+ - * /

 字符串连接符: p:name="#{fullname.first + " " + fullname.lastname}"

 比较运算符: > < == >= ...

 逻辑运算符:and、or、not

 if-else运算符:<property name="answer" value="#{Main.answer()=='A'?A:B}">

 正则表达式:matches

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

1  <bean id="circle" class="com.guigu.spring.autowire.Circle" >
2    // 调用了PI属性
3  <property name="zhouchang" value="#{T(java.lang.Math).PI}"></property>
4 
5  </bean>

 这样,xml的功能有多了,可以直接做一些调用和判断。

 文章问学习记录,还没有深入学习。若有错误,望指正

原文地址:https://www.cnblogs.com/ooooevan/p/5803813.html