Spring基础13——Spring表达式语言:SpEL
1.SpEL简介
Spring表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言。语法上类似于EL:SpEL使用#{...}作为界定符,所有在大框号中的字符都将被认为是SpEL,SpEL为bean的属性进行动态赋值提供了便利。
2.SpEL用法
SpEL有以下几种用法:
1)引用字面量的值
2)通过bean的id对bean进行引用
3)引用类的静态属性
4)调用方法以及引用对象中的属性
5)计算表达式的值
6)正则表达式的匹配
3.SpEL应用
下面我们就来实现以上的几种用法,首先我们先创建几个实体类:
Person类
public class Person {
private String name;
private Car car;
//应用address bean的city属性
private String city;
//根据car的price确定info,car的price>300000 金领 否则白领
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
private String info;
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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", car=" + car +
", city='" + city + '\'' +
", info='" + info + '\'' +
'}';
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
Car类
public class Car {
private String brand;
private double price;
//轮胎的周长
private double tyrePerimeter;
@Override
public String toString() {
return "Car{" +
"brand='" + brand + '\'' +
", price=" + price +
", tyrePerimeter=" + tyrePerimeter +
'}';
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Car() {
System.out.println("Car's Constructor");
}
public double getTyrePerimeter() {
return tyrePerimeter;
}
public void setTyrePerimeter(double tyrePerimeter) {
this.tyrePerimeter = tyrePerimeter;
}
}
Address类
public class Person {
private String name;
private Car car;
//应用address bean的city属性
private String city;
//根据car的price确定info,car的price>300000 金领 否则白领
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
private String info;
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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", car=" + car +
", city='" + city + '\'' +
", info='" + info + '\'' +
'}';
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
1)引用字面量
可以直接通过#{‘字面量的值’}方式对bean的属性进行注入,但是这种方式本身意义不大,因为在value属性中直接填写value的值即可。
<bean id="address" class="com.wzy.spel.Address">
<!--使用spel为属性赋值一个字面值-->
<property name="city" value="#{'BeiJing'}"/>
<property name="street" value="WUDAOKOU"/>
</bean>
2)引用类的静态属性与计算表达式的值
声明一个Car类型的bean,并且应用Math类中的今天变量PI,来计算汽车轮胎的周长
<bean id="car" class="com.wzy.spel.Car">
<property name="brand" value="Audi"/>
<property name="price" value="300000"/>
<!--使用spel 引用类的静态属性-->
<property name="tyrePerimeter" value="#{T(java.lang.Math).PI * 80}"/>
</bean>
3)引用其他的bean
声明一个Person类型的Bean,并使用SpEL表达式注入属性。
<bean id="person" class="com.wzy.spel.Person">
<!--使用spEL来引用其他的Bean-->
<property name="car" value="#{car}"/>
<!--使用spEl引用其他Bean的属性-->
<property name="city" value="#{address.city}"/>
<property name="name" value="wzy"/>
<!--在spEL中使用运算符,如果车的价格大于三十万则说明是金领,否则是白领-->
<property name="info" value="#{car.price > 300000 ? '金领' : '白领'}"/>
</bean>
编写测试类:
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-spel.xml");
//获取address对象
Address address = (Address) ctx.getBean("address");
System.out.println(address);
//获取car对象
Car car = (Car) ctx.getBean("car");
System.out.println(car);
//获取person对象
Person person = (Person) ctx.getBean("person");
System.out.println(person);
}
}
执行结果:

Spring基础13——Spring表达式语言:SpEL的更多相关文章
- Spring学习记录(七)---表达式语言-SpEL
SpEL---Spring Expression Language:是一个支持运行时查询和操作对象图表达式语言.使用#{...}作为定界符,为bean属性动态赋值提供了便利. ①对于普通的赋值,用Sp ...
- 7 -- Spring的基本用法 -- 12... Spring 3.0 提供的表达式语言(SpEL)
7.12 Spring 3.0 提供的表达式语言(SpEL) Spring表达式语言(简称SpEL)是一种与JSP 2 的EL功能类似的表达式语言,它可以在运行时查询和操作对象图.支持方法调用和基本字 ...
- Sping表达式语言--SpEL
Spring表达式语言---SpEL 是一个支持运行时查询和操作对象的强大的表达式语言 语法类似于EL:SpEL使用#{...}作为定界符,所有在大括号中的字符都将被认为是SpEL SpEL为bean ...
- Spring表达式语言SpEL
Spring表达式语言,简称SpEL,是一个支持运行时查询和操作对象图的强大的表达式语言.语法类似于EL:SpEL使用#{…}作为定界符,所有在大括号中的字符都将被认为是SpEL SpEL为bean属 ...
- Spring学习笔记--Spring表达式语言SpEL
Spring3引入了Spring表达式语言(Spring Expression Language,SpEL).SpEL是一种强大的.简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean ...
- Spring表达式语言SpEL简单介绍
Spring3引入了Spring表达式语言(Spring Expression Language,SpEL). SpEL有非常多特性.比較经常使用的包含: 1.使用bean的id来引用bean, 以下 ...
- Spring表达式语言:SpEl
概念: 是一个支持运行时查询和操作的对象图的强大的表达式语言. 语法类似于EL:SpEl使用#{ ...}作为定界符,所有在大括号中的 字符都将被认为是SpEl SpEl为bean的属性进行动态赋值提 ...
- Spring3表达式语言(SpEL)学习笔记
最新地址请访问:http://leeyee.github.io/blog/2011/06/19/spring-expression-language Spring Excpression Langua ...
- Spring基础篇——Spring的AOP切面编程
一 基本理解 AOP,面向切面编程,作为Spring的核心思想之一,度娘上有太多的教程啊.解释啊,但博主还是要自己按照自己的思路和理解再来阐释一下.原因很简单,别人的思想终究是别人的,自己的理解才是 ...
随机推荐
- Java数据结构之排序---希尔排序
希尔排序的基本介绍: 希尔排序同之前的插入排序一样,它也是一种插入排序,只不过它是简单插入排序之后的一个优化的排序算法,希尔排序也被称为缩小增量排序. 希尔排序的基本思想: 希尔排序是把数组中给定的元 ...
- [LeetCode]-011-Roman_to_Integer
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...
- 20165220课程设计个人报告——Part4-Cortex M4模块
个人报告: 20165220 葛宇豪 1.个人贡献 a.实验环境搭建 b.代码分析与理解 2.设计中遇到的问题以及解决方案 问题1:mdk5每次编译之前都会直接闪退 刚开始以为是环境问题,后来上网查资 ...
- word文档每章的页眉页脚设置
1. 每章后面插入分隔符,下一页. 2. 编辑页眉,取消选中链接的上一页,然后编辑页眉即可.
- webpack配置之webpack.config.js文件配置
webpack配置之webpack.config.js文件配置 webpack.config.js webpack resolve 1.总是手动的输入webpack的输入输出文件路径,是一件非常繁琐 ...
- webpack安装低于4版本(没有配置webpack.config.js)
webpack安装低于4版本(没有配置webpack.config.js) webpack 无需配置输出参数-o 低版本 1.初始化项目 npm init -y 初始化项目 2.安装webpack@ ...
- python学习笔记:(三)list(列表)常用的内置方法
list(列表)包含一些内置的方法,以下为详细介绍: (方法调用:对象.方法(参数)) 1.append() 在列表的末尾添加新的对象 如: lst=[1,2,3] lst.append(4) --- ...
- kubernets部署微服务电商平台
一.准备条件 1) 确保kubernetes可以访问:reg.yunwei.edu镜像库(vim /etc/hosts) [root@cicd yml]# cat /etc/hosts 127.0.0 ...
- oracle 日期格式操作
原文转自:http://hi.baidu.com/gzfvb/blog/item/5062b7f008eb70a8a50f5206.html Oracle日期格式: to_date(" ...
- CSS3—— 分页 框大小 弹性盒子 多媒体查询 多媒体查询实例
分页 网站有很多个页面,就需要使用分页来为每个页面做导航 点击及鼠标悬停分页样式 圆角样式 悬停过度效果 带边框的分页 分页间隔 分页字体大小 居中分页 面包屑导航 框大小 box-sizing 属性 ...