Spring教程 - Spring表达式语言
Spring教程 - Spring表达式语言
Spring 3.0引入了一个强大的表达式语言称为Spring表达式语言,或Spring EL。
Spring表达式语言,通过XML或注释,在bean创建时间期间被评估或执行。
春天表达语言hello世界
在下面的代码中展示了如何使用Spring表达式语言注入String,整数和bean到属性,在XML和注释。
为了使用Spring表达式语言,我们需要添加以下jar 对pom.xml文件的依赖。
... <properties> <spring.version>3.0.5.RELEASE</spring.version> </properties> <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> ...
Java Bean
下面的代码定义了两个Java bean,后面我们将使用Spring Expression Language在XML和注释中将值注入属性。
服务器Java Bean。
package com.www.w3cschool.cnmon; public class Server { 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 "Server [item=" + item + ", itemName=" + itemName + "]"; } }
项目Java Bean。
package com.www.w3cschool.cnmon; public class Item { private String name; private int qty; public String getName() { return name; } @Override public String toString() { return "Item [name=" + name + ", qty=" + qty + "]"; } public int getQty() { return qty; } public void setQty(int qty) { this.qty = qty; } public void setName(String name) { this.name = name; } }
XML中的Spring EL
下面的代码显示了如何在XML中使用Spring EL。
下面的代码显示了如何在XML中使用Spring EL。...
<bean id="itemBean" class="com.www.w3cschool.cnmon.Item"> <property name="name" value="itemA" /> <property name="qty" value="10" /> </bean>
然后,我们通过重用Item Bean中的值来创建XML中的服务器bean。
Spring表达式语言用#{expression}括起来。以下代码引用Item bean的值。它将itemBean分配给item,将itemBean.name分配给itemName。 itemBean.name
的值为itemA。
<bean id="myServer" class="com.www.w3cschool.cnmon.Server"> <property name="item" value="#{itemBean}" /> <property name="itemName" value="#{itemBean.name}" /> </bean>
完整配置文件。
<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.www.w3cschool.cnmon.Item"> <property name="name" value="itemA" /> <property name="qty" value="10" /> </bean> <bean id="myServer" class="com.www.w3cschool.cnmon.Server"> <property name="item" value="#{itemBean}" /> <property name="itemName" value="#{itemBean.name}" /> </bean> </beans>
Download Java2s_Spring_EL_XML.zip
Spring EL的注释
以下示例显示如何在注释中使用Spring表达式语言。
首先,我们定义一个Java Bean项目,并用 Component
注释标记它。对于其属性,我们使用 Value
注释来分配它们的值
package com.www.w3cschool.cnmon; 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; } @Override public String toString() { return "Item [name=" + name + ", qty=" + qty + "]"; } public int getQty() { return qty; } public void setQty(int qty) { this.qty = qty; } public void setName(String name) { this.name = name; } }
然后,我们定义一个服务器Java bean,并用 Component
注释来标记它。当定义Server的属性时,我们使用从Item bean定义的 Value
注释的值。
package com.www.w3cschool.cnmon; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component("myServer") public class Server { @Value("#{itemBean}") private Item item; @Value("#{itemBean.name}") 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 "Server [item=" + item + ", itemName=" + itemName + "]"; } }
最后,我们必须在xml文件中启用自动组件扫描。
<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 base-package="com.www.w3cschool.cnmon" /> </beans>
例子
以下代码显示了如何运行上面的代码。
package com.www.w3cschool.cnmon; 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"); Server obj = (Server) context.getBean("myServer"); System.out.println(obj); } }
上面的代码生成以下结果。
Download Java2s_spring_EL_Annotation.zip
Spring表达式语言中的集合
以下代码显示了如何在Spring表达式语言中使用集合。
首先,定义一个包含集合的Java bean。
package com.www.w3cschool.cnmon; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.stereotype.Component; @Component("testBean") public class Test { private Map<String, String> map; private List<String> list; public Test() { map = new HashMap<String, String>(); map.put("MapA", "This is A"); map.put("MapB", "This is B"); map.put("MapC", "This is C"); list = new ArrayList<String>(); list.add("List0"); list.add("List1"); list.add("List2"); } }
然后,使用表达式语言中的集合。
package com.www.w3cschool.cnmon; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component("customerBean") public class Customer { @Value("#{testBean.map["MapA"]}") private String mapA; @Value("#{testBean.list[0]}") private String list; }
在xml配置文件中使用相同的设置。
<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="customerBean" class="com.www.w3cschool.cnmon.Customer"> <property name="mapA" value="#{testBean.map["MapA"]}" /> <property name="list" value="#{testBean.list[0]}" /> </bean> <bean id="testBean" class="com.www.w3cschool.cnmon.Test" /> </beans>
更多建议: