当前位置: 代码迷 >> 综合 >> Spring学习记录(四)Spring表达式语言:SpEL
  详细解决方案

Spring学习记录(四)Spring表达式语言:SpEL

热度:75   发布时间:2023-11-19 11:13:21.0
Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言。
语法类似于 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,所以选的第一个表达式。

这里我们赋值用的也是#{}的形式。



  相关解决方案