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;
}
@Override
public 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;
}
@Override
public 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,所以选的第一个表达式。
这里我们赋值用的也是#{}的形式。