Spring基础—— SpEL
一、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的更多相关文章
- 第65节:Java后端的学习之Spring基础
Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...
- Spring基础知识
Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...
- spring基础整理
spring基础教程:https://www.tutorialspoint.com/spring/spring_overview.htm 注入实例 <bean id="" c ...
- Spring 基础知识
Spring架构简单描述 原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻 ...
- Spring Security -SpEL表达式
Spring Security -SpEL表达式 开启SpEL表达式 <!-- use-expressions是否开启 SpEL表达式 o.s.s.web.access.expression.W ...
- Spring基础配置
从毕业到现在我一直从事Android开发,但是对JavaEE一直念念不忘,毕业校招的时候,一个礼拜拿了三个offer,岗位分别是Android.JavaEE和JavaSE,后来觉得Android比较简 ...
- Spring基础系列--AOP织入逻辑跟踪
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9619910.html 其实在之前的源码解读里面,关于织入的部分并没有说清楚,那些前置.后 ...
- Spring基础系列-AOP源码分析
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9560803.html 一.概述 Spring的两大特性:IOC和AOP. AOP是面向切 ...
- Spring基础系列-Spring事务不生效的问题与循环依赖问题
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9476550.html 一.提出问题 不知道你是否遇到过这样的情况,在ssm框架中开发we ...
随机推荐
- arulesSequences包做序列模式的关联分析
实验数据: 实验文件: ? 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 02 ...
- 最近使用ajaxFileUpload和Jcrop来实现图片上传和截图,出现一个图片无法更换的问题
使用setImage 都无法更换 刷新图片 找了很久 什么方法都找过,最后发现...... 原来是 上传的图片的命名问题... 每次上传的图片 保存后都是同样的图片, 所以返回路径都是一样... jc ...
- Redis之高可用方案
Redis之高可用方案 Redis以其高效的访问速度著称.但由于官方还未发布redis-cluster,而redis的replica又有诸多不便:比如一组master-slave的机器,如果之间有 ...
- brew 出现 git 错误的问题分析
现象 brew update的时候出现 gitcrash 分析 在brew update 的时候看见有 git gc 的字样,提示有在gc 的动作.到/usr/local/ 目录,直接运行 git ...
- iOS常用宏 定义
总结了iOS开发过程中的一些常用宏,以后会陆陆续续添加进来. 字符串是否为空 1 #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull c ...
- quick2.26 android下http崩溃
quick2.26 http android下崩溃解决方案 1.先去quick官网合并代码(QuickHTTPInterface.java,CCHTTPRequestAndroid.cpp) 2.屏蔽 ...
- 如何通过XShell传输文件
转载孟光孟叔的博客: https://learndevops.cn/index.php/2016/06/14/how-to-transfer-file-using-xshell xshell目前最好 ...
- mac vim 使用
再使用Mac编辑文件时感觉非常不爽,没有语法高亮,只能通过设置改变所有字体为同一个颜色,看起来还是别扭, 于是找到方法使用vim时可以实现语法高亮显示,操作步骤如下: 1.进入/usr/share/v ...
- [转] 关于hibernate的缓存使用
http://blog.csdn.net/woshichenxu/article/details/586361 1. 关于hibernate缓存的问题: 1.1.1. 基本的缓 ...
- Sublime Text3 插件集合
下载地址:http://download.csdn.net/detail/yinluhui/9029791 [包含的插件有: AndyJS2.BracketHighlighter.emmet-subl ...