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

SpEL为bean属性进行动态赋值提供了便利

通过SpEL可以实现:

  • 通过bean的id对bean进行引用
  • 调用方法及引用对象中的属性
  • 计算表达式的值
  • 正则表达式的匹配

如果我们要为基本类型或者String类型赋值,我们也可以用SpEL:

整数:<property name="count" value="#{5}">

科学计数法:<property name="capacity" value="#{1e4}">

String可以使用单引号或者双引号作为字符创的定界符号:

<property name="name" value="#{"Tom"}">或者我们也可以这么写:

<property name="name" value="#{'Tom'}">

布尔类型"<property name="enabled" value="#{false}" >

我们这里只是说可以用,瞅着都知道这个很麻烦(ಥ_ಥ)还不如直接赋值,大家知道有这回事就行。

当然我们也可以拿这玩意引用其他对象:

<property name="myCar" value="#{car}">这里相当于用了ref属性

也可以用来引用其他对象的属性,这种操作我们是无法通过普通操作完成的:

<property name="myCity" value="#{address.city}">

SpEL还可以调用其他方法,还可以链式操作,真的可以骚上天:

<property name="myCity" value="#{address.toString()}">

<property name="myCity" value="#{address.roString().toUpperCase()}">

其他还有很多丰富的其他功能:

  • 算数运算符:+、-、*、/、%、^
  • 加号还可以用作字符创链接
  • 比较运算符<、>、==、<=、>=、lt、gt、eq、le、ge
  • 逻辑运算符and、or、not、|
  • if-else运算符
  • 正则表达式matches
  • 调用静态方法或者静态属性T()

可以看出SpEL是块非常庞大的内容,我们需要花很久才能将它真正掌握,这里我就提一些比较常用的功能。

先做一下准备工作,先写一下新的JavaBean:

Car.java

  1. private String brand;  
  2. private double price;  
  3. //轮胎周长  
  4. private double tyrePerimeter; 

Person.java

  1. private String name;  
  2. //引用address bean 的city属性  
  3. private String city;  
  4.     
  5.     
  6. private Car car;  
  7. //根据car的price 确定info  
  8. //car 的price>=3000000:经理  
  9. //否则为白领  
  10. private String info;  

Address.java和之前的一样,接下来来写配置文件beans-spel.xml

SpEL赋字面量的值

  1. <bean id="address" class="com.figsprite.bean.SpEL.Address">  
  2.     <property name="city" value="#{'上海'}"/>  
  3.     <property name="street" value="#{'陆家嘴'}"/>  
  4.  </bean>  

SpEL 算法运算符 调用静态属性

  1. <bean id="car" class="com.figsprite.bean.SpEL.Car">  
  2.     <property name="brand" value="奥迪"/>  
  3.     <property name="price" value="5000000"/>  
  4.     <property name="tyrePerimeter" value="#{T(java.lang.Math).PI * 80}"  
  5. </bean>  

SpEL 引用其他对象 引用其他对象属性 if-else

  1. <bean id="person" class="com.figsprite.bean.SpEL.Person">  
  2.     <property name="car" value="#{car}"/>  
  3.     <property name="city" value="#{address.city}"/>  
  4.     <property name="info" value="#{car.price>3000000?'经理':'白领'}"/>  
  5.     <property name="name" value="Tom"/>  
  6. </bean>  

这里就存在动态赋值,如info属性,我需要根据car.price的具体值决定info的值

Spring表达式语言SpEL的更多相关文章

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

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

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

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

  3. Spring表达式语言:SpEl

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

  4. Sping表达式语言--SpEL

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

  5. Spring ——表达式语言 Spring Expression Language (转载)

    目录 SpEL简介与功能特性 一.为什么需要Spring表达式语言 二.SpEL表达式Hello World! 三.SpEL表达式 3.1.文字表达式 3.2.SPEL语言特性 3.2.1.属性 3. ...

  6. Spring表达式语言 之 5.1 概述 5.2 SpEL基础(拾叁)

    5.1  概述 5.1.1  概述 Spring表达式语言全称为"Spring Expression Language",缩写为"SpEL",类似于Struts ...

  7. 开涛spring3(5.1&5.2) - Spring表达式语言 之 5.1 概述 5.2 SpEL基础

    5.1  概述 5.1.1  概述 Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行 ...

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

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

  9. Spring表达式语言之SpEL

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

随机推荐

  1. [PHP] try catch在日常中的使用

    1.try catch可以捕获上一层throw的异常 2.finally是不管try或者catch任何一块有return, 最终都会执行的块 3.try也是可以捕获到call_user_func_ar ...

  2. Apollo配置中心动态刷新日志级别

    Apollo配置中心动态刷新日志级别 添加次配置后,当在apollo上面调整日志级别不需要重启服务器,马上就能生效 /** * 结合apollo动态刷新日志级别 * @author: nj * @da ...

  3. 使用 Lombok 优雅编码

    一.介绍和使用 Lombok 是一个 java 库,能以简单的注解形式来简化 java 代码,提高开发人员的开发效率. 常见使用在开发过程中需要写的 javabean,往往开发需要花时间去添加相应的 ...

  4. console对象探究

    作为一个前端,console.log()可能是你最常用的方法,打印打印再打印,但是其实console对象上有用的方法有很多,来,各位看官上眼 分类输出 厌倦了 console.log 单调的输出?欢迎 ...

  5. Dynamics 365 POA表记录的产生

    微软动态CRM专家罗勇 ,回复314或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 前面的博文 Dyna ...

  6. Dynamics 365创建用户提示:您正在尝试使用已由其他用户使用的域登录来创建用户。如何解决。

    摘要: 本人微信公众号:微软动态CRM专家罗勇 ,回复287或者20181128可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me ...

  7. ccflow表机构与运行机制(二次开发必看)

    驰骋工作流引擎,工作流程管理系统,表结构与运行机制. ------------------------------------------------------- 前言: 1, ccflow 有自动 ...

  8. C# Debug和release判断用法

    C# Debug和release判断用法 #if (!DEBUG) Response.Write("DEBUG下运行");#else Response.Write("re ...

  9. Go 语言笔记

    Go 语言笔记 基本概念 综述 Go 语言将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡. 设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 ch ...

  10. 在Linux系统中同步更新我们的Github博客

    原理介绍 类似于版本管理,我们把我们的hexo博客文件系统在Github上建立一个分支,通过管理分支提交最新的博客文件系统,保证我们博客框架的更新.然后我们基于最新的博客框架,撰写文章,进行Githu ...