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的更多相关文章

  1. Spring学习记录(七)---表达式语言-SpEL

    SpEL---Spring Expression Language:是一个支持运行时查询和操作对象图表达式语言.使用#{...}作为定界符,为bean属性动态赋值提供了便利. ①对于普通的赋值,用Sp ...

  2. 7 -- Spring的基本用法 -- 12... Spring 3.0 提供的表达式语言(SpEL)

    7.12 Spring 3.0 提供的表达式语言(SpEL) Spring表达式语言(简称SpEL)是一种与JSP 2 的EL功能类似的表达式语言,它可以在运行时查询和操作对象图.支持方法调用和基本字 ...

  3. Sping表达式语言--SpEL

    Spring表达式语言---SpEL 是一个支持运行时查询和操作对象的强大的表达式语言 语法类似于EL:SpEL使用#{...}作为定界符,所有在大括号中的字符都将被认为是SpEL SpEL为bean ...

  4. Spring表达式语言SpEL

    Spring表达式语言,简称SpEL,是一个支持运行时查询和操作对象图的强大的表达式语言.语法类似于EL:SpEL使用#{…}作为定界符,所有在大括号中的字符都将被认为是SpEL SpEL为bean属 ...

  5. Spring学习笔记--Spring表达式语言SpEL

    Spring3引入了Spring表达式语言(Spring Expression Language,SpEL).SpEL是一种强大的.简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean ...

  6. Spring表达式语言SpEL简单介绍

    Spring3引入了Spring表达式语言(Spring Expression Language,SpEL). SpEL有非常多特性.比較经常使用的包含: 1.使用bean的id来引用bean, 以下 ...

  7. Spring表达式语言:SpEl

    概念: 是一个支持运行时查询和操作的对象图的强大的表达式语言. 语法类似于EL:SpEl使用#{ ...}作为定界符,所有在大括号中的 字符都将被认为是SpEl SpEl为bean的属性进行动态赋值提 ...

  8. Spring3表达式语言(SpEL)学习笔记

    最新地址请访问:http://leeyee.github.io/blog/2011/06/19/spring-expression-language Spring Excpression Langua ...

  9. Spring基础篇——Spring的AOP切面编程

    一  基本理解 AOP,面向切面编程,作为Spring的核心思想之一,度娘上有太多的教程啊.解释啊,但博主还是要自己按照自己的思路和理解再来阐释一下.原因很简单,别人的思想终究是别人的,自己的理解才是 ...

随机推荐

  1. Java数据结构之排序---希尔排序

    希尔排序的基本介绍: 希尔排序同之前的插入排序一样,它也是一种插入排序,只不过它是简单插入排序之后的一个优化的排序算法,希尔排序也被称为缩小增量排序. 希尔排序的基本思想: 希尔排序是把数组中给定的元 ...

  2. [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 ...

  3. 20165220课程设计个人报告——Part4-Cortex M4模块

    个人报告: 20165220 葛宇豪 1.个人贡献 a.实验环境搭建 b.代码分析与理解 2.设计中遇到的问题以及解决方案 问题1:mdk5每次编译之前都会直接闪退 刚开始以为是环境问题,后来上网查资 ...

  4. word文档每章的页眉页脚设置

    1. 每章后面插入分隔符,下一页. 2. 编辑页眉,取消选中链接的上一页,然后编辑页眉即可.

  5. webpack配置之webpack.config.js文件配置

    webpack配置之webpack.config.js文件配置 webpack.config.js webpack resolve  1.总是手动的输入webpack的输入输出文件路径,是一件非常繁琐 ...

  6. webpack安装低于4版本(没有配置webpack.config.js)

    webpack安装低于4版本(没有配置webpack.config.js) webpack 无需配置输出参数-o 低版本  1.初始化项目 npm init -y 初始化项目 2.安装webpack@ ...

  7. python学习笔记:(三)list(列表)常用的内置方法

    list(列表)包含一些内置的方法,以下为详细介绍: (方法调用:对象.方法(参数)) 1.append() 在列表的末尾添加新的对象 如: lst=[1,2,3] lst.append(4) --- ...

  8. kubernets部署微服务电商平台

    一.准备条件 1) 确保kubernetes可以访问:reg.yunwei.edu镜像库(vim /etc/hosts) [root@cicd yml]# cat /etc/hosts 127.0.0 ...

  9. oracle 日期格式操作

    原文转自:http://hi.baidu.com/gzfvb/blog/item/5062b7f008eb70a8a50f5206.html   Oracle日期格式:   to_date(" ...

  10. CSS3—— 分页 框大小 弹性盒子 多媒体查询 多媒体查询实例

    分页 网站有很多个页面,就需要使用分页来为每个页面做导航 点击及鼠标悬停分页样式 圆角样式 悬停过度效果 带边框的分页 分页间隔 分页字体大小 居中分页 面包屑导航 框大小 box-sizing 属性 ...