文档章节

Spring表达式语言(SpEL)

霍淇滨
 霍淇滨
发布于 06/25 09:31
字数 593
阅读 10
收藏 0
点赞 0
评论 0

1、SpEL引用

Spring EL在bean创建时执行其中的表达式。此外,所有的Spring表达式都可以通过XML或注解的方式实现。下面将使用Spring表达式语言(SpEL),注入字符串,整数,Bean到属性。

SpEL的基本格式是 #{SpEL expression} 。

SpEL可以引用一个Bean、Bean属性和Bean方法,通过点符号(.)实现。

通过注解的形式:

@Component("customerBean")
public class Customer {

	@Value("#{addressBean}")   //引用Bean
	private Address address;

	@Value("#{addressBean.country}")    //引用Bean属性
	private String country;
	
	@Value("#{addressBean.getFullAddress('ground')}")    //引用Bean方法
	private String fullAddress;

	//getter and setter methods
}

@Component("addressBean")
public class Address {

	@Value(#{'xianlin'.toUpperCase()})    //普通方法也可以引用
	private String street;

	@Value("CN")
	private String country;

	public String getFullAddress(String prefix) {
		return prefix + " : " + street + " " + country;
	}

	//getter and setter methods
}

使用注解形式不要忘了启动自动组件扫描:

<context:component-scan base-package="com.yiibai.core" />

通过XML文件形式:

<bean id="customerBean" class="com.yiibai.core.Customer">
	<property name="address" value="#{addressBean}" />
	<property name="country" value="#{addressBean.country}" />
	<property name="fullAddress" value="#{addressBean.getFullAddress('yiibai')}" />
</bean>

<bean id="addressBean" class="com.yiibai.core.Address">
	<property name="street" value="#{'xianlin'.toUpperCase()}" />
	<property name="postcode" value="571100" />
	<property name="country" value="CN" />
</bean>

2、SpEL运算符

SpEL支持大多数标准的数学、逻辑和关系运算符。 

  1. 关系运算符 : 等于 (==, eq), 不等于 (!=, ne), 小于 (<, lt), 小于或等于 (<= , le), 大于 (>, gt), 和大于或等于 (>=, ge).
  2. 逻辑运算符 : 且(and), 或(or), 非 (!).
  3. 数学运算符 : 加法(+), 减法 (-), 乘法 (*), 除法(/), 除模(%) 和指数幂 (^).
  4. 三元运算符 : 条件?true:false

在SpEL中使用运算符和平常使用没什么区别,比如:

@Value("#{itemBean.num < 100 ? true : false}")
private boolean warning;

3、SpEL从集合中取值

//get map whete key = 'MapA'
@Value("#{testBean.map['MapA']}")
private String mapA;

//get first value from list, list is 0-based.
@Value("#{testBean.list[0]}")
private String list;

4、SpEL正则表达式

SpEL可以使用正则表达式,通过一个关键字”matches"实现。

// 邮箱格式的正则表达式
String emailRegEx = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)" +
	"*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

// 正则表达式判断是否是一个合法的邮箱格式
@Value("#{emailBean.emailAddress matches customerBean.emailRegEx}")
private boolean validEmail;

// 正则表达式判断是否是数字
@Value("#{ ('100' matches '\\d+') == true ? " +
	"'yes this is digit' : 'No this is not a digit'  }")
private String msg;

 

© 著作权归作者所有

共有 人打赏支持
霍淇滨
粉丝 17
博文 209
码字总数 167912
作品 0
南京
其他
Spring Bean定义中表达式语言的支持

SpEL(Spring Expression Language,Spring表达式语言)的一个重要的作用就是扩展Spring容器的功能,允许在Bean定义中使用SpEL。XML配置文件和Annotation中都可以使用SpEL。在XML和Annotatio...

摆渡者
2014/03/09
0
0
Spring表达式语言:SpEL(三)

本文为转载学习 原文链接:http://jinnianshilongnian.iteye.com/blog/1418311 5.4.1 xml风格的配置 SpEL支持在Bean定义时注入,默认使用“#{SpEL表达式}”表示,其中“#root”根对象默认可以...

heroShane
2014/02/02
0
0
Spring3表达式语言(SpEL)的预定义变量

spring3 SpEL 的两个内置变量在xml里的用法: <bean id="xxx" value="#{systemProperties['java.io.tmpdir']}"><bean> systemProperties主要是在vm启动时通过-D设置的系统属性 <bean id="xx......

伊森papa
2012/04/11
0
0
Spring-data-commons(CVE-2018-1273)漏洞分析

  前言   CVE-2018-1273 是 Spring-data-commons近期爆出的一个可远程执行代码的漏洞,为了了解更多细节,本文将从漏洞的成因,漏洞的判定以及漏洞的利用三个方面来进行详细说明。   漏...

FreeBuf
06/01
0
0
Spring在注解中使用表达式

Spring 3.0引入的@Value让我们可以使用注解注入基本类型的值。比如String.int,boolean 实际上,装配简单的值并不是@Value所擅长的,不过借助spEL表达式,@Value就牛逼了,可以在运行期通过s...

IceCat
2014/03/16
0
1
安全的复杂之处:安全web请求的架构

借助于Spring Security的强大基础配置功能以及内置的认证功能,我们在前面讲述的三步配置是很快就能完成的;它们的使用是通过添加auto-config属性和http元素实现的。 但不幸的是,应用实现的...

bigYuan
2014/12/04
0
0
spring表达式语言(SpEL)简述及Hello World示例

作为spring的基础模块之一,spring表达式语言模块(Spring Expression Language,简称SpEL)在运行时提供了查询和操作一个对象图的强大的表达式语言。 Spring EL既可以通过XML被配置,也可以...

木木在路上
2015/09/15
0
0
spring security3.x学习(21)_关于方法过滤

本文为转载学习 原文链接:http://blog.csdn.net/dsundsun/article/details/11946949 @RolesAllowed("ROLE_USER") public void changePassword(String username, String password); 或 @Rol......

heroShane
2014/02/02
0
0
spring配置文件中util:properties和context:property-placeholder

util:properties和context:property-placeholder标签都可以用来获取外部配置文件中的内容 1、util:properties 它是以声明bean方式来使用,创建了一个bean,下面使用的时候通过SpEL表达式#{}...

Iceberg_XTY
05/27
0
0
spring security3.x学习(20)_初探authorize标签和第四个例子

本文为转载学习 原文链接:http://blog.csdn.net/dsundsun/article/details/11880743 第四个例子也就是spring security3那本书中的第五章的例子。 csdn下载:http://download.csdn.net/deta...

heroShane
2014/02/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

android屏幕适配

android屏幕适配 采用的是鸿阳的适配方式,项目依赖: compile 'com.zhy:autolayout:1.4.5' 使用步骤: 在manifest文件中标注你的设计图尺寸 <meta-data android:name="design_width" andro...

android-key
4分钟前
0
0
istio 0.8 安装步骤

============================ istio 0.8 安装步骤--------------------------------------- istio 0.8 安装步骤 1.安装k8s环境 参考:http://sealyun.com/pro/products/ master,salve两台机......

xiaomin0322
6分钟前
1
0
tmux 退出不干净问题

tmux ls 已经没有窗口了,但是显示还有在登入 只有强制T下线了。

NLGBZJ
7分钟前
0
0
卡辛斯基的警告

卡辛斯基的警告 作者: 阮一峰 1、 1978年5月25日,美国西北大学的工程教授巴克利·克利斯(Buckley Crist),收到了邮政局退回的一个包裹。 这个包裹寄往芝加哥大学,但是收件人“查无此人”...

祖冲之
7分钟前
0
0
如何一周内学会编程?实战项目中总结经验[图]

如何一周内学会编程?实战项目中总结经验[图]: 我知道有很多草根肯定都是日常有很多各种各样,自己认为非常有价值的想法,但是,苦于自己没有技术,无法实现自己的需求,典型的属于“就差一...

原创小博客
12分钟前
0
0
UILabel和UITextView文字换行差异

多行文本换行时,一般要求结尾如果是标点符号,标点符号不能单独占一行,需要将上一行的最后一个文字将和标点符号一起放在下一行。 设置 lineBreakMode = .byWordWrapping,按单词分割换行。...

十八郎
14分钟前
0
0
C++ 使用TinyXML解析XML文件

读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便...

LoSingSang
17分钟前
0
0
cron-chkconfig-systemd-unit-target

任务计划cron: /etc/crontab #任务计划配置文件 格式: 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-6or1-7) 用户 命令 /var/spool/cron/[username] #各个用户配置的任务历史 配置...

ZHENG-JY
19分钟前
0
0
Java反射和动态代理学习

一、Java在运行是识别对象和类的信息,主要有两种方式:一种是传统RTTI,假定在编译时已经知道了所有的类型信息,另一种是反射机制,允许我们在运行时发现和使用类的信息。 每个类都会产生一...

cjxcloud
20分钟前
0
0
react-native 使用webview调用自己书写的页面

之前只接触调用线上别人的页面,原来也可以使用自己书写的页面,代码如下: <WebView ref={webView =>this.webView = webView} onNavigationStateChange={e=>this.change(e)} source =......

前端大白
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部