spring学习笔记4——SpEL表达式

来源:互联网 发布:求购信息搜索软件 编辑:程序博客网 时间:2024/05/29 10:10

一、SpEL的特征:

       SpELSpring Experssion LanguageSpring表达式语言,它是一种强大、简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean的属性或构造器参数中。它拥有许多特征,包括:使用beanID来引用bean,调用方法和访问对象属性,对值进行算术、关系和逻辑运算,正则表达式匹配,集合操作。

 

二、   SpEL的基本原理

       SpEL的首要目标是通过计算获得某个值,最简单的SpEL求值或许是对字面值、bean的属性或者某个类的常量进行求值。求值时用“#{}”作为定界符。

       先来个例子:

       首先建一个java项目,并配置application.xml文件(不懂的见spring学习笔记2

       在src目录下创建包tool,并在包下建一Instrument接口,和一Guitar类,Guitar类继承于Instrument接口。代码如下

       Instrument接口

       

       Guitar类:

       

        在src目录下创建包tool,并在包下建一Performer接口,和一Singer类,Singer类继承于Performer接口。代码如下

        Performer接口:

         

        Singer类:有number(表示第几首歌)、song(歌名)、instrument(演奏的工具)三个属性(设置settergetter

         

         这里我们看如何通过SpEL将值注入到singer的各个属性,直接在application.xml中添加bean

           

        此时新建一Test类测试:

        

        运行测试代码,有如下输出

       

       这里可以看出singer类所有的属性都能注入。其中要注意的是,注入字符串需要在#{}中添加单引号‘’,而注入bean时,只需要直接#{}中添加beanID即可。当然,出来这些,SpEL的面值还可以是floatboolean。此时我们也可以看出,这些功能不用SpEL我们也可以快速完成。但除了面值,通过SpEL我们还可以使用bean的引用来获取bean的属性

这里,我用新建一个模仿者Copier类来模仿singer所要唱的歌,其Copier代码如下:

     

       修改application.xml

     

      修改Test代码

     

       此时运行Test类,控制台输出:

      

      此时我们通过了bean的引用来获取了bean的属性

除了这些,SpEL还提供了操作类,用T()运算符调用类作用的方法和常量。比如有10首歌,singer歌手随机选择唱第几首

修改application.xml

 

此时在Text类获取singer Bean并调用perform()方法,执行后就可以随机获取到第几首歌了。

 

三、在SpEL值上执行操作

       从上面的例子,我们可以看出,SpEL支持算术运算。SpEL提供了多种运算符:

       

       其实这些运算符类型跟java并没多大的差别,这里先做个条件运算的例子,模仿者模仿歌手唱歌,如果歌手不唱的或,他就自己唱一首“What Will I Do”。这里只有修改application.xml即可。

       

        注:这里我删掉了<propery name=”song”>

        此时在Text类获取copier Bean并调用perform()方法,执行后控制台输出

        这里两次调用了singer.getSong()写起来比较繁琐,所以SpEL为我们提供了三元运算符的变体来简化代码:

       

 

四、SpEL中筛选集合

         这里,我先新建一乐器Piano

             

        然后在添加一个instrument清单

         

         注:添加util需要添加util的命名空间

         

         此时我们为singer类添加instrument只需如下编码:

         

         Test类测试,可以发piano被注入到singer

        同样,我们也可以用.properties文件取值

         src下创建Song.properties,里面的值是

          

         application.xml中定义Util

         

        此时<bean id=”singer”>的属性

         

        这样可以实现按名字取值

 

        除此之外,SpEL还提供了(.?[“查询条件”])用于查找集合成员,同时用(.^[“查询条件”])表示查询第一个符合条件的元素,用(.?[“查询条件”])表示查询最后一个符合条件的元素。而已,SpEL还提供了投影.![“字段名”]来从集合中每个成员选择特定字段放到新的集合中。(这里我也有点乱了,不做例子额)

 

 

 

 

0 0