• SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-008-SpEL介绍


    一、

    1.SpEL expressions are framed with  #{ ... }

    2.SpEl的作用

    Sp EL has a lot of tricks up its sleeves, including the following:
     The ability to reference beans by their ID s
     Invoking methods and accessing properties on objects
     Mathematical, relational, and logical operations on values
     Regular expression matching
     Collection manipulation
    As you’ll see later in this book, S p EL can also be used for purposes other than depen-
    dency injection. Spring Security, for example, supports defining security constraints
    using S p EL expressions. And if you’re using Thymeleaf templates as the views in your
    Spring MVC application, those templates can use S p EL expressions to reference
    model data.

    3.基础例子

    (1)解析原始类型数据 #{1}

    (2)解析java类的静态方法#{T(System).currentTimeMillis()},"T()"会把被包括的内容解析为java类

    (3)解析bean:#{sgtPeppers.artist},取出id为“sgtPeppers”的artist属性

    (4)解析properties:#{systemProperties['disc.title']}

    二、进一步了解SpEl

    1.EXPRESSING LITERAL VALUES

    (1)浮点型:#{3.14159}

    (2)科学计数法:#{9.87E4}  PS:=98,700

    (3)字符串:#{'Hello'}

    (4)布尔型:#{false}

    2.REFERENCING BEANS ,  PROPERTIES ,  AND METHODS

    (1)引用bean:#{sgtPeppers}   (in this case, a bean whose  ID is  sgtPeppers )

    (2)引用bean的属性:#{sgtPeppers.artist} 引用id为"sgtPeppers"的bean的artist属性

    (3)调用bean的方法:#{artistSelector.selectArtist()}

    (4)链式调用:#{artistSelector.selectArtist().toUpperCase()}

    (5)防止空指针:#{artistSelector.selectArtist()?.toUpperCase()}

    3.WORKING WITH TYPES IN EXPRESSIONS

    The key to working with class-scoped methods and constants in S p EL is to use the T()
    operator. For example, to express Java’s Math class in S p EL , you need to use the T()
    operator like this:
    T(java.lang.Math)
    The result of the T() operator, as shown here, is a Class object that represents java.lang.Math .


    (1)T(java.lang.Math).PI

    (2)T(java.lang.Math).random()   random value between 0 and 1:

    (1)计算一个代表圆的bean的周长:#{2 * T(java.lang.Math).PI * circle.radius}

    (2)计算面积:#{T(java.lang.Math).PI * circle.radius ^ 2}

    (3)用"+"连接字符串:#{disc.title + ' by ' + disc.artist}

    (4)符号逻辑和文本逻辑操作符是等效的:#{counter.total == 100}   或者   #{counter.total eq 100}

    (5)三目运算符:#{scoreboard.score > 1000 ? "Winner!" : "Loser"}

         设置默认值:#{disc.title ?: 'Rattle and Hum'}

    4.EVALUATING REGULAR EXPRESSIONS

    (1)验证邮箱(不全) :#{admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.com'}

    5.EVALUATING COLLECTIONS

    (1)#{jukebox.songs[4].title}

    (2)随机播放歌曲:#{jukebox.songs[T(java.lang.Math).random() *jukebox.songs.size()].title}

    (3)"[]"也可用来从字符串中截取字符:#{'This is a test'[3]} ,返回's'

    (4)筛选:#{jukebox.songs.?[artist eq 'Aerosmith']},会返回所有Aerosmith的歌曲的新集合

    (5)SpEL also offers two other selection operations: .^[] for selecting the first matching entry and .$[] for selecting the last matching entry.

    返回第一个符合条件的条目:#{jukebox.songs.^[artist eq 'Aerosmith']}

    (6)投影:SpEL offers a projection operator ( .![] ) to project properties from the elements in the collection onto a new collection.

    抽取所有title:#{jukebox.songs.![title]}

    组合操作,获取Aerosmith的所有歌名:#{jukebox.songs.?[artist eq 'Aerosmith'].![title]}



  • 相关阅读:
    C#面向对象的基本原则
    EXTJS学习笔记:类似于Window的登录窗体
    c# 类似于QQ表情弹出框功能的二种实现方法
    EXTJS学习笔记:grid之分组实现groupingview
    RibbonBar屏蔽右键
    webservice安全性浅谈
    js生成二维码以及插入图片
    c++之const解惑
    最短路径连接表形式
    深入理解c++之动态内存和指针
  • 原文地址:https://www.cnblogs.com/shamgod/p/5238071.html
Copyright © 2020-2023  润新知