一、SpEL:Spring 表达式语言,在使用的时候类似于 EL 表达式,但是需要注意的是,SpEL 使用在 Spring Config 文件中。

二、格式:使用 #{} 作为界定符,所有在大括号中的字符都将被认为成是 SeEL

三、作用:

1.通过 Bean 的 id 对 Bean 进行引用

2.调用方法以及引用对象中的属性

3.计算表达式的值

4.正则表达式的匹配

四、SpEL 字面值:

1.整数:<property name="age" value="#{23}"/>

2.小数:<property name="salary" value="#{2300.55}"/>

3.科学计数法:<property name="salary" value="#{1e4}"/>

4.字符串:<property name="empName" value="#{'emp01'}"/> 或 <property name='empName' value='#{"emp01"}'/>

5.布尔值:<property name="formal" value="#{false}"/>

五、引用 Bean、属性和方法

1.引用其他 Bean:

<bean class="com.nucsoft.spring.bean.Employee" id="employee">
  <property name='empName' value='#{"emp01"}'/>
  <property name="age" value="#{23}"/>
</bean> <bean class="com.nucsoft.spring.bean.Department" id="department">
  <property name="deptName" value="#{'dept01'}"/>
  <property name="employee" value="#{employee}"/>
</bean>

2.引用其他 Bean 的属性

<bean class="com.nucsoft.spring.bean.Employee" id="employee">
  <property name='empName' value='#{"emp01"}'/>
  <property name="age" value="#{23}"/>
</bean> <bean class="com.nucsoft.spring.bean.Department" id="department2" p:deptName="AAAA" p:employee-ref="employee">
</bean> <bean class="com.nucsoft.spring.bean.Department" id="department">
  <property name="deptName" value="#{department2.deptName}"/>
  <property name="employee" value="#{employee}"/>
</bean>

控制台输出:

Department{deptName='AAAA', employee=Employee{empName='emp01', age=23}}

注意:引用其他 Bean 的属性是通过 getXxx() 方法来引用的

3.调用方法,支持链式操作

<bean class="com.nucsoft.spring.bean.Department" id="department">
  <property name="deptName" value="#{department2.deptName.toString().toLowerCase()}"/>
  <property name="employee" value="#{employee}"/>
</bean>

控制台输出:

Department{deptName='aaaa', employee=Employee{empName='emp01', age=23}}

六、SpEL 支持的运算

1.数学运算符:+,-,*,/,%,^

+:

<bean class="com.nucsoft.spring.bean.Employee" id="employee">
  <property name='empName' value='#{"emp01"}'/>
  <property name="age" value="#{23}"/>
  <property name="salary" value="#{53.32 + 12.23}"/>
</bean>

控制台输出:

Employee{empName='emp01', age=23, salary=65.55}

其他运算符使用类似。

2.字符串连接:+

<property name='empName' value='#{"emp01" +" "+ 12}'/>

控制台输出:

Employee{empName='emp01 12', age=23, salary=-41.09}

3.比较运算符:<,>,==,<=,>=,lt,gt,eq,le,ge

<property name="formal" value="#{100 == 100}"/>

控制台输出:

Employee{empName='emp01 12', age=23, salary=-41.09, formal=true}

4.逻辑运算符:and,or,not,|

<property name="formal" value="#{100 == 100 and 100 gt 80}"/>

控制台输出:

Employee{empName='emp01 12', age=23, salary=-41.09, formal=true}

其他几个与之类似。

5.if-else 运算符:? exp1 : exp2

<property name="formal" value="#{100 == 100 ? false : true}"/>

控制台输出:

Employee{empName='emp01 12', age=23, salary=-41.09, formal=false}

6.正则表达式:matches

<property name="matchesEmail" value="#{'a@b.com' matches '/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})'}"/>

控制台输出:

isMatchesEmail=false

七、调用静态方法或静态属性。通过 T(), 返回一个类的对象

<property name="salary" value="#{T(java.lang.Math).PI * 1000}"/>

控制台输出:

salary=3141.592653589793

Spring基础—— SpEL的更多相关文章

  1. 第65节:Java后端的学习之Spring基础

    Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...

  2. Spring基础知识

    Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...

  3. spring基础整理

    spring基础教程:https://www.tutorialspoint.com/spring/spring_overview.htm 注入实例 <bean id="" c ...

  4. Spring 基础知识

    Spring架构简单描述 原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻 ...

  5. Spring Security -SpEL表达式

    Spring Security -SpEL表达式 开启SpEL表达式 <!-- use-expressions是否开启 SpEL表达式 o.s.s.web.access.expression.W ...

  6. Spring基础配置

    从毕业到现在我一直从事Android开发,但是对JavaEE一直念念不忘,毕业校招的时候,一个礼拜拿了三个offer,岗位分别是Android.JavaEE和JavaSE,后来觉得Android比较简 ...

  7. Spring基础系列--AOP织入逻辑跟踪

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9619910.html 其实在之前的源码解读里面,关于织入的部分并没有说清楚,那些前置.后 ...

  8. Spring基础系列-AOP源码分析

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9560803.html 一.概述 Spring的两大特性:IOC和AOP. AOP是面向切 ...

  9. Spring基础系列-Spring事务不生效的问题与循环依赖问题

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9476550.html 一.提出问题 不知道你是否遇到过这样的情况,在ssm框架中开发we ...

随机推荐

  1. 查看mysql版本的四种方法

    1:在终端下:mysql -V. 以下是代码片段: [shengting@login ~]$ mysql -V mysql Ver 14.7 Distrib 4.1.10a, for redhat-l ...

  2. Java 模板引擎 jetbrick-template

    jetbrick-template 是一个新一代 Java 模板引擎,具有高性能和高扩展性. 适合于动态 HTML 页面输出或者代码生成,可替代 JSP 页面或者 Velocity 等模板. 指令和 ...

  3. SK-Learn使用NMF(非负矩阵分解)和LDA(隐含狄利克雷分布)进行话题抽取

    英文链接:http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf_lda.html 这 ...

  4. Scala 深入浅出实战经典 第75讲:模式匹配下的For循环

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...

  5. iOS中生成并导入基于Swift编程语言的Framework

    从iOS 8.0开始就引入了framework打包方式以及Swift编程语言.我们可以主要利用Swift编程语言将自己的代码打包成framework.不过当前Xcode 7.x在自动导入framewo ...

  6. Redmine性能优化方案

    近来公司redmine服务器表现很糟糕,在16核,64GRAM的机器上,压测结果竟然只有每秒5~7个请求,部分页面一个都出不来. 以下是我对Redmine性能优化方案: redmine服务器性能问题排 ...

  7. mssql中sp_executesql的用法

    上图:

  8. ECSHOP后台SQL查询提示错误 this sql May contain UPDATE,DELETE,TRUNCATE,ALTER,DROP,FLUSH,INSERT

    一).首先说一下错误现象:市面上流行的绝大部分ECSHOP模板,安装的时候都需要执行一段或几段SQL语句来修改数据结构或者初始化一些数据.大多数ECSHOP管理员为了省事,都会通过 “ECSHOP后台 ...

  9. [原]OpenGL基础教程(五)缓冲区数据更新方式

    1.glBufferSubData 适用于相同数据类型 void SetPositionY(float y){    vector<Vector3<float>>::itera ...

  10. [AX]AX2012 Number sequence framework :(三)再谈Number sequence

    AX2012的number sequence framework中引入了两个Scope和segment两个概念,它们的具体作用从下面序列的例子说起. 法国/中国的法律要求财务凭证的Journal nu ...