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的功能有多了,可以直接做一些调用和判断。
文章问学习记录,还没有深入学习。若有错误,望指正