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

 

posted @ 2022-02-15 11:48  威兰达  阅读(638)  评论(0编辑  收藏  举报