Spring EL 表达式
本篇讲述了Spring Expression Language —— 即Spring3中功能丰富强大的表达式语言,简称SpEL。
SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复杂表达式,存取对象属性、对象方法调用等。
所有的SpEL都支持
1.XML和
2.Annotation 两种方式,格式:#{ SpEL expression }
spring中EL表达式的一些用法:
比较典型的使用时@Value注解,或者spring提供注解的某些属性可以使用el表达式,如@Scheduld("${job.sever-cron}")
主要说说@Value注解(它基本上就代表了别的用法)
1、普通字符 @Value("string") private String str;
2、操作系统属性 @Value("#{systemProperties['os.name']}") private String osName;
3、bean的属性(可以注入自身bean的属性) @Value("msAlertService.processDataForTerminalActionCron") private String cron;
4、一些简单的运算(同理,一些方法调用也是可以的) @Value("#{java.lang.Math.random() * 100.0}") private Double radomDouble;
5、文件 @Value("classpath: terminal.txt") private Resource termianlFile;
6、属性文件的值 @Value("${job.process-data-cron}") private String processDataCron;
7、网址内容 @Value("http://www.google.com") private Resource googleSource;
2. 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.lei.demo.el.Customer"> <property name="mapA" value="#{testBean.map['MapA']}" /> <property name="list" value="#{testBean.list[0]}" /> </bean>
<bean id="numberGuess" class="org.spring.samples.NumberGuess">
<property name="randomNumber" value="#{ T(java.lang.Math).random() * 100.0 }"/>
</bean>
<bean id="taxCalculator" class="org.spring.samples.TaxCalculator">
<property name="defaultLocale" value="#{ systemProperties['user.region'] }"/>
</bean>
</beans>
二、使用场景
1. 求值
这部分介绍SpEL接口和表达式语言的简单使用。
下面的代码段是使用SpEL api获取简单的字符串,和表达式运算。
ExpressionParser parser = new SpelExpressionParser(); Expression exp = parser.parseExpression("'Hello World'"); String message = (String) exp.getValue();
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Hello World'.concat('!')");
String message = (String) exp.getValue();
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Hello World'.bytes.length");
int length = (Integer) exp.getValue();
GregorianCalendar c = new GregorianCalendar();
c.set(1856, 7, 9);
// The constructor arguments are name, birthday, and nationality.
Inventor tesla = new Inventor("Nikola Tesla", c.getTime(), "Serbian");
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("name");
String name = (String) exp.getValue(tesla);
// name == "Nikola Tesla"
exp = parser.parseExpression("name == 'Nikola Tesla'");
boolean result = exp.getValue(tesla, Boolean.class);
// result == true
学海无涯 代码作伴