• 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
  • 相关阅读:
    博客园样式
    nginx
    Django-environ 加载 .env 配置文件
    uwsgi 常见命令
    ActionScript3.0(AS3)中的泛型数组Vector
    ADDED、ADDED_TO_STAGE、REMOVED、REMOVED_FROM_STAGE这几个事件的区别
    Sprite/MovieClip的Enter_Frame事件,不受addChild/removeChild影响
    “AS3.0高级动画编程”学习:第二章转向行为(下)
    “AS3.0高级动画编程”学习:第二章转向行为(上)
    [转载]等角(斜45度)游戏与数学
  • 原文地址:https://www.cnblogs.com/lgg20/p/15895819.html
Copyright © 2020-2023  润新知