Spring EL hello world实例

本文介绍如何使用Spring表达式语言(SpEL)来注入字符串、整数和Bean到属性中,包括XML配置和注解方式。通过具体的Customer和Item类示例,展示了在XML配置文件和Java注解中如何利用SpEL进行值注入。
Spring EL与OGNL和JSF EL相似,计算评估或在bean创建时执行。此外,所有的Spring表达式都可以通过XML或注解。
在本教程中,我们将学习如何使用Spring表达式语言(SpEL),注入字符串,整数,Bean到属性,无论是在XML和注释。

Spring Beans

两个简单Bean,后来利用 SpEL 注入值到属性,在 XML 和 注释。

File:Customer.java

public class Customer {

	private Item item;
	
	private String itemName;

	public Item getItem() {
		return item;
	}

	public void setItem(Item item) {
		this.item = item;
	}

	public String getItemName() {
		return itemName;
	}

	public void setItemName(String itemName) {
		this.itemName = itemName;
	}

	@Override
	public String toString() {
		return "Customer [item=" + item + ", itemName=" + itemName + "]";
	}
	
}
File:Item.java
public class Item {

	private String name;
	private int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Item [name=" + name + ", age=" + age + "]";
	}	
	
}

一. Spring EL以XML形式

使用 SpEL的#{ SpEL expression }括号,请参阅XML bean定义文件下面的例子。
File:beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">

	<bean id="itemBean" class="com.ray.core.Item">
		<property name="name" value="ItemA"/>
		<property name="age" value="10"/>
	</bean>
	
	<bean id="customerBean" class="com.ray.core.Customer">
		<property name="item" value="#{itemBean}"/>
		<property name="itemName" value="#{itemBean.name}"/>
	</bean>
</beans>
  1. #{itemBean} – 注入“itemBean”到“customerBean”Bean 的“item”属性。
  2. #{itemBean.name} – 注入“itemBean”的“name”属性到 “customerBean" bean的"itemname”属性。
执行结果:
Customer [item=Item [name=ItemA, age=10], itemName=ItemA]

二. Spring EL以注解形式

请参阅等效版本注释模式。

要在注解使用使用SpEL,必须通过注解注册您的组件。如果注册bean在XML和Java类中定义@Value,该@Value将无法执行。
File:Customer.java
@Component("customerBean")
public class Customer {

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


	@Override
	public String toString() {
		return "Customer [item=" + item + ", itemName=" + itemName + "]";
	}
	
}
File:Item.java
/**
 * 必须有getName()方法,否则报错
 * @author Rain
 */
@Component("itemBean")
public class Item {

	@Value("itemA")
	private String name;
	
	@Value("10")
	private int age;
	
	public String getName() {
		return name;
	}
	@Override
	public String toString() {
		return "Item [name=" + name + ", age=" + age + "]";
	}	
	
}
启用自动组件扫描。
File:beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd">
	
	<context:component-scan base-package="com.ray.core"/>
</beans>
注意:引入命名空间
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
在注解模式下,可以使用@Value定义Spring EL。在这种情况下,一个String和Integer值直接注入到“itemBean”,之后又注入“itemBean”到“customerBean”属性。

执行输出

运行它,无论是使用 SpEL在XML 还是注释都显示了同样的结果:
public class Test {

	public static void main(String[] args) {
		
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
		Customer cost = (Customer) ctx.getBean("customerBean");
		System.out.println(cost);
	}
}
输出结果
Customer [item=Item [name=itemA, age=10], itemName=itemA]




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Remember_Ray

何其有幸,得你青睐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值