Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言。
语法类似于 EL:SpEL 使用 #{…} 作为定界符,所有在大框号中的字符都将被认为是 SpEL
SpEL 为 bean 的属性进行动态赋值提供了便利
通过 SpEL 可以实现:
通过 bean 的 id 对 bean 进行引用
调用方法以及引用对象中的属性
计算表达式的值
语法类似于 EL:SpEL 使用 #{…} 作为定界符,所有在大框号中的字符都将被认为是 SpEL
SpEL 为 bean 的属性进行动态赋值提供了便利
通过 SpEL 可以实现:
通过 bean 的 id 对 bean 进行引用
调用方法以及引用对象中的属性
计算表达式的值
正则表达式的匹配
下面我们来看一个例子:
还是我们的Car类:
package com.fei.HelloOne;public class Car {private String pinpai;private Double price;public void Car(String pinpai,Double price) {this.pinpai=pinpai;this.price = price;}public void Car() {}public String getPinpai() {return pinpai;}public void setPinpai(String pinpai) {this.pinpai = pinpai;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}@Overridepublic String toString() {return "Car [pinpai=" + pinpai + ", price=" + price + "]";}}
然后是Person类:
package com.fei.HelloOne;public class Person {private String name;private Car car;private String say;public String getSay() {return say;}public void setSay(String say) {this.say = say;}@Overridepublic String toString() {return "Person [name=" + name + ", car=" + car + ", say=" + say + "]";}public String getName() {return name;}public void setName(String name) {this.name = name;}public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}}
然后我们看配置,使用SqEL表达:
<bean name ="car" class="com.fei.HelloOne.Car">
<property name="pinpai" value="#{'byd'}"></property>
<!-- 我们试下SpEL -->
<property name="price" value="#{23333}"></property>
</bean>
<!-- 配置person 使用SqEL-->
<bean name="person" class="com.fei.HelloOne.Person">
<property name="name" value="#{'菲菲'}"></property>
<property name="car" value="#{car}"></property>
<!-- SqEL表达式 -->
<property name="say" value="#{car.price > 20000 ? '太贵了':'很不错,挺便宜的'}"></property>
</bean>
这里我们队say赋值的时候做了一个判断,就是car的price是否大于20000,如果大于就赋值第一个表达式,否则赋值第二个表达式。
我们在main函数试下:
ApplicationContext ac =new ClassPathXmlApplicationContext("applicationContext.xml");Person person = (Person)ac.getBean("person");System.out.println(person);
结果:
Person [name=菲菲, car=Car [pinpai=byd, price=23333.0], say=太贵了]
做判断了,因为这里我们引用了car的price,大于20000,所以选的第一个表达式。
这里我们赋值用的也是#{}的形式。