SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-008-SpEL介绍
一、
1.SpEL expressions are framed with #{ ... }
2.SpEl的作用
Sp EL has a lot of tricks up its sleeves, including the following:
The ability to reference beans by their ID s
Invoking methods and accessing properties on objects
Mathematical, relational, and logical operations on values
Regular expression matching
Collection manipulation
As you’ll see later in this book, S p EL can also be used for purposes other than depen-
dency injection. Spring Security, for example, supports defining security constraints
using S p EL expressions. And if you’re using Thymeleaf templates as the views in your
Spring MVC application, those templates can use S p EL expressions to reference
model data.
3.基础例子
(1)解析原始类型数据 #{1}
(2)解析java类的静态方法#{T(System).currentTimeMillis()},"T()"会把被包括的内容解析为java类
(3)解析bean:#{sgtPeppers.artist},取出id为“sgtPeppers”的artist属性
(4)解析properties:#{systemProperties['disc.title']}
二、进一步了解SpEl
1.EXPRESSING LITERAL VALUES
(1)浮点型:#{3.14159}
(2)科学计数法:#{9.87E4} PS:=98,700
(3)字符串:#{'Hello'}
(4)布尔型:#{false}
2.REFERENCING BEANS , PROPERTIES , AND METHODS
(1)引用bean:#{sgtPeppers} (in this case, a bean whose ID is sgtPeppers )
(2)引用bean的属性:#{sgtPeppers.artist} 引用id为"sgtPeppers"的bean的artist属性
(3)调用bean的方法:#{artistSelector.selectArtist()}
(4)链式调用:#{artistSelector.selectArtist().toUpperCase()}
(5)防止空指针:#{artistSelector.selectArtist()?.toUpperCase()}
3.WORKING WITH TYPES IN EXPRESSIONS
The key to working with class-scoped methods and constants in S p EL is to use the T()
operator. For example, to express Java’s Math class in S p EL , you need to use the T()
operator like this:
T(java.lang.Math)
The result of the T() operator, as shown here, is a Class object that represents java.lang.Math .
(1)T(java.lang.Math).PI
(2)T(java.lang.Math).random() random value between 0 and 1:

(1)计算一个代表圆的bean的周长:#{2 * T(java.lang.Math).PI * circle.radius}
(2)计算面积:#{T(java.lang.Math).PI * circle.radius ^ 2}
(3)用"+"连接字符串:#{disc.title + ' by ' + disc.artist}
(4)符号逻辑和文本逻辑操作符是等效的:#{counter.total == 100} 或者 #{counter.total eq 100}
(5)三目运算符:#{scoreboard.score > 1000 ? "Winner!" : "Loser"}
设置默认值:#{disc.title ?: 'Rattle and Hum'}
4.EVALUATING REGULAR EXPRESSIONS
(1)验证邮箱(不全) :#{admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.com'}
5.EVALUATING COLLECTIONS
(1)#{jukebox.songs[4].title}
(2)随机播放歌曲:#{jukebox.songs[T(java.lang.Math).random() *jukebox.songs.size()].title}
(3)"[]"也可用来从字符串中截取字符:#{'This is a test'[3]} ,返回's'
(4)筛选:#{jukebox.songs.?[artist eq 'Aerosmith']},会返回所有Aerosmith的歌曲的新集合
(5)SpEL also offers two other selection operations: .^[] for selecting the first matching entry and .$[] for selecting the last matching entry.
返回第一个符合条件的条目:#{jukebox.songs.^[artist eq 'Aerosmith']}
(6)投影:SpEL offers a projection operator ( .![] ) to project properties from the elements in the collection onto a new collection.
抽取所有title:#{jukebox.songs.![title]}
组合操作,获取Aerosmith的所有歌名:#{jukebox.songs.?[artist eq 'Aerosmith'].![title]}
SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-008-SpEL介绍的更多相关文章
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-007-给BEAN运行时注入值placeholder、@Value
一.用placeholder给bean运行时注入值的步骤 Spring取得placeholder的值是用${...} 1.声明placeholder bean (1)java方式 In order t ...
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-006-给bean运行时注入值(Environment,Property文件)
一. 直观的给bean注入值如下: @Bean public CompactDisc sgtPeppers() { return new BlankDisc( "Sgt. Pepper's ...
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-005-Bean的作用域@Scope、ProxyMode
一. Spring的bean默认是单例的 But sometimes you may find yourself working with a mutable class that does main ...
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-004-消除bean自动装配的歧义@Primary
一. 假设有如下三个类实现同一个接口,则自动装配时会产生歧义 @Component public class Cake implements Dessert { ... } @Component pu ...
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-002-激活PROFILE、设置默认值、@ActiveProfiles
一. Spring honors two separate properties when determining which profiles are active:spring.profiles. ...
- SPRING IN ACTION 第4版笔记-第三章Advancing wiring-001-DataSource在应用和开发环境之间切换 profile
一. DataSource在应用和开发环境的产生方式不同,可以用srping 的profile管理 Spring’s solution for environment-specific beans i ...
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-009-用SPEL给bean运行时注入依赖值
1.When injecting properties and constructor arguments on beans that are created via component-scanni ...
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-004-消除BEAN自动装配的歧义@QUALIFIER及自定义注解
一. The @Qualifier annotation is the main way to work with qualifiers. It can beapplied alongside @Au ...
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-003-@Conditional根据条件生成bean及处理profile
一.用@Conditional根据条件决定是否要注入bean 1. package com.habuma.restfun; public class MagicBean { } 2. package ...
随机推荐
- ASP连接11种数据库的常用语法
1.Access数据库的DSN-less连接方法: 以下为引用的内容: set adocon=Server.Createobject("adodb.connection") ado ...
- C#.net在后台执行javascript
string script = string.Format("<script type='text/javascript' >alert('{0}');</script&g ...
- glassfish 日志输出配置
asadmin set-log-levels javax.enterprise.system.tools.deployment=WARNING
- 使用Linq 来解决Datatable 去除数据重复
在这也说明下,除此之外还可以通过 DataView 的方式来处理,当个人觉得这有点不好用.这里就不多作说明了 代码比较简单,直接看代码 using System; using System.Colle ...
- hibernate初探
1.在MyEclipse Datebase Explorer 页面中新创建一个连接数据库“DB Browser”的XX,如起名“register”2.新建项目->右键Properties-> ...
- 使用qt制作简单的加法,乘法运算。
1.首先构架qt应用项目 2.然后打开使用 Qt desinger打开 Fomr File 里的UI文件进行编辑 3.由于此程序只需点击加号,减号这两个按钮,所以设置了两个信号槽 4.然后是连接信号槽 ...
- 第48条:如果需要精确的答案,请避免使用float和double
float和double主要为了科学计算和工程计算而设计,执行二进制浮点运算,这是为了在广泛的数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以不适合用于需要精确 ...
- Mysql存储引擎__笔记
Mysql存储引擎(表类型): Mysql数据库: 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以使存储器上一些文件的集合或者一些内存 数据的内存数据的集合. Mysql数据库是开放源代 ...
- 网页frame引入实现全屏滚动,使用jquery实现浏览器兼容
近期做一个项目,其中有一个需求,就是网页中需要用frame引入页面并实现frame的全屏,在网上查了好多感觉方式都不尽相同,但是都不是介绍的很全面,浏览器的兼容也做的不好,自己总结了一些要点,需要的可 ...
- 我对TCP CDG拥塞控制算法的改进和优化
其实这不是我的优化,我是借用了BBR之力. 借了什么力呢?这是我一再强调的,BBR最大的共享不是为Linux贡献了一个TCP拥塞控制算法(它同时在也BSD上被实现...),而是它重构了 ...