spring表达式语言(SpEL)简述及Hello World示例

作为spring的基础模块之一,spring表达式语言模块(Spring Expression Language,简称SpEL)在运行时提供了查询和操作一个对象图的强大的表达式语言。

Spring EL既可以通过XML被配置,也可以通过注解来进行配置。下面通过简单的例子来示范如何通过两种不同的方式配置SpEL从而注入String、整型和javabean数据。

  1. Spring EL依赖

    项目通过maven进行管理,在maven的pom.xml配置文件中声明spring的核心依赖,maven将自动下载依赖包。(若不采用maven进行项目管理,可直接下载并添加jar包至buildpath)

pom.xml:

	<properties>
		<spring.version>3.1.4.RELEASE</spring.version>
	</properties>

	<dependencies>

		<!-- Spring 3 dependencies -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>

	<dependencies>

2. Spring Beans

定义两个简单的bean,后面将分别通过XML方式和注解方式用SpEL为bean的属性注入值

public class Customer {

	private Item item;

	private String itemName;
}

public class Item {

	private String name;

	private int qty;
}

3. 通过XML方式配置Spring EL

SpEL表达式的格式如下#{SpEL表达式},XML bean定义文件中配置SpEL,示例如下

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<bean id="itemBean" class="com.mkyong.core.Item">
		<property name="name" value="itemA" />
		<property name="qty" value="10" />
	</bean>

	<bean id="customerBean" class="com.mkyong.core.Customer">
		<property name="item" value="#{itemBean}" />
		<property name="itemName" value="#{itemBean.name}" />
	</bean>
</beans>

#{itemBean}-将itemBean注入到customerBean的item属性中

#{itemBean.name}-将itemBean的name属性注入到customerBean的itemName属性中

4. 通过注解配置Spring EL

注意:要通过注解配置SpEL,必须将bean通过注解方式注册。如果在XML配置文件中注册bean,同时在java类中定义@Value,@Value将会失效。

注解方式配置bean如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("customerBean")
public class Customer {

	@Value("#{itemBean}")
	private Item item;

	@Value("#{itemBean.name}")
	private String itemName;

	//...}

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("itemBean")
public class Item {

	@Value("itemA") //inject String directly
	private String name;

	@Value("10") //inject interger directly
	private int qty;

	public String getName() {
		return name;
	}

	//...}

在配置文件中允许自动扫描:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<context:component-scan/>
</beans>

注解方式中,通过@Value定义springEL。通过上述的配置,string值和整型值直接被注入到itemBean的属性中,然后itemBean被注入到customerBean的属性中。

5. 输出

运行下述代码,无论是XML方式还是注解方式都会输出同样的结果

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
	public static void main(String[] args) {
	    ApplicationContext context = new ClassPathXmlApplicationContext("SpringBeans.xml");

	    Customer obj = (Customer) context.getBean("customerBean");
	    System.out.println(obj);
	}}

输出:

Customer [item=Item [name=itemA, qty=10], itemName=itemA]

类似JSF EL,除了直接设置值之外,SpEL还支持其他多种表达式,包括关系表达式、正则表达式、数组、列表等等。

参考

http://www.mkyong.com/spring3/spring-el-hello-world-example/

http://examples.javacodegeeks.com/enterprise-java/spring/spel/spring-expression-language-example/

时间: 2024-10-13 09:50:11

spring表达式语言(SpEL)简述及Hello World示例的相关文章

Spring表达式语言SpEL简介

Spring3引入了Spring表达式语言(Spring Expression Language,SpEL). SpEL有很多特性,比较常用的包括: 1.使用bean的id来引用bean, 下面这个例子就是将卧室这个bean通过SpEL注入到house这个bean的bedroom属性中. <bean id="bedroom" class="go.derek.Bedroom"/> <bean id="house" class=&q

Spring学习笔记--Spring表达式语言SpEL

Spring3引入了Spring表达式语言(Spring Expression Language,SpEL).SpEL是一种强大的.简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean的属性或构造器参数中.字面值我们可以在<property>元素的value属性中使用#{}界定符将值装配到Bean的属性中. <property name="count" value="#{5}" /> 浮点型数字一样可以出现在SpEL表达式中.

Sping表达式语言--SpEL

Spring表达式语言---SpEL 是一个支持运行时查询和操作对象的强大的表达式语言 语法类似于EL:SpEL使用#{...}作为定界符,所有在大括号中的字符都将被认为是SpEL SpEL为bean的属性进行动态赋值提供了便利 通过SpEL可以实现: 通过bean的id对bean进行引用 调用方法以及引用对象中的属性 计算表达式的值 正则表达式的匹配 SpEL:字面量 字面量的表示: -整数:<property name="count" value="#{5}&quo

Spring表达式语言 之 5.1 概述 5.2 SpEL基础(拾叁)

5.1  概述 5.1.1  概述 Spring表达式语言全称为"Spring Expression Language",缩写为"SpEL",类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式.存取对象图属性.对象方法调用等等,并且能与Spring功能完美整合,如能用来配置Bean定义. 表达式语言给静态Java语言增加了动态功能. SpEL是单独模块,只依赖于core模块,不依赖于其他模块,可以单独使用. 5.1.2  能干什么 表达式语言

开涛spring3(5.1&amp;5.2) - Spring表达式语言 之 5.1 概述 5.2 SpEL基础

5.1  概述 5.1.1  概述 Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式.存取对象图属性.对象方法调用 等等,并且能与Spring功能完美整合,如能用来配置Bean定义. 表达式语言给静态Java语言增加了动态功能. SpEL是单独模块,只依赖于core模块,不依赖于其他模块,可以单独使用. 5.1.2  能干什么 表达式语言一般是用最简单的形式完成最主

Spring表达式语言:SpEL语法

Spring表达式语言简称:SpEL,SpEL既可以独立于Spring容器使用,,也可以在Spring配置文件中使用,这样就大大简化了Spring的Bean配置,给配置文件起到了"减肥"的作用,下面开始总结SpEL语法 1:直接量表达式 直接量表达式也是SpEL最简单的表达式,如下: public class SpelGrammar { public static void main(String[]args) { // 创建一个ExpressionParser对象,用于解析表达式 E

Spring基础系列6 -- Spring表达式语言(Spring EL)

Spring基础系列6 -- Spring表达式语言(Spring EL) 转载:http://www.cnblogs.com/leiOOlei/p/3543222.html 本篇讲述了Spring Expression Language —— 即Spring3中功能丰富强大的表达式语言,简称SpEL.SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复杂表达式,存取对象属性.对象方法调用等.所有的SpEL都支持XML和Annotation两种方式,格式:#{ SpEL exp

spring4-2-bean配置-6-Spring表达式语言SpEL

Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于 EL:SpEL 使用 #{…} 作为定界符,所有在大框号中的字符都将被认为是 SpEL SpEL 为 bean 的属性进行动态赋值提供了便利 通过 SpEL 可以实现: 通过 bean 的 id 对 bean 进行引用 调用方法以及引用对象中的属性 计算表达式的值 正则表达式的匹配 字面量的表示 整数:<property name="count" value="#

Spring 表达式语言 (一)

Spring 表达式语言 (Spring Expression Language)是Spring 3.0开始引入的,它是一种强大.简洁的装配Bean的方式,能在运行时执行表达式将值(包括引用)注入到Bean. SpEL的特性包括, 使用Bean的ID引用 调用方法或访问属性 进行算术.逻辑或关系运算 正则表达式 集合操作 字面值 最简单的SpEL就是一个字面值, 使用${}. 如将数字8装配到下面的属性: <property name="count" value="#{