文档章节

Spring表达式语言(SpEL)

akane_oimo
 akane_oimo
发布于 06/25 09:31
字数 593
阅读 12
收藏 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;

 

© 著作权归作者所有

共有 人打赏支持
akane_oimo
粉丝 19
博文 129
码字总数 155529
作品 0
南京
其他
Spring Bean定义中表达式语言的支持

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

摆渡者
2014/03/09
0
0
《Spring5学习》 03 运行时值注入

Spring的运行时值注入是为了在一些应用场景避免将属性值硬编码在配置类中而提供的解决方案,Spring目前提供了几种方式实现运行时值注入,下面我们分别来讲下 1 - Spring中的Environment 在S...

老韭菜
08/14
0
0
说说 Spring 表达式语言(SpEL)的核心类与用法

Spring 表达式语言 Spring Expression Language(简称 SpEL )是一个支持运行时查询和操作对象图的表达式语言 。 语法类似于 EL 表达式 ,但提供了显式方法调用和基本字符串模板函数等额外特...

deniro
09/08
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

没有更多内容

加载失败,请刷新页面

加载更多

Kafka技术资料总结(不断更新中)

1、Kafka实践:到底该不该把不同类型的消息放在同一个主题中 2、Kafka剖析系列: Kafka剖析(一):Kafka背景及架构介绍 Kafka设计解析(二):Kafka High Availability (上)...

九州暮云
53分钟前
1
0
面向对象设计原则(OOP)

单一职责原则(Single responsibility principle)又称单一功能原则。它规定一个类应该只有一个发生变化的原因。 核心原则:低耦合,高内聚。 一个类,应该只有一个引起它变化的原因,也就是...

gackey
今天
4
0
C++ 锁

C++提供了两种常用的锁,std::lock_guard<Lockable &T>和std::unique_lock<Lockable &T>。通常使用场景下,这两个锁用法一致。即,在构造锁对象时上锁,在析构锁对象时解锁。使用户从上锁/解...

yepanl
今天
4
0
Kali Linux Docker 練習

docker pull kalilinux/kali-linux-docker docker run -t -i kalilinux/kali-linux-docker /bin/bash apt-get update apt-get install htop apt-get install nmap apt-get install wpscan ap......

BaiyuanLab
今天
4
0
通俗大白话来理解TCP协议的三次握手和四次分手

最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就...

onedotdot
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部