一、引言

小编第一眼看见这个SpEl表达式时,第一反应是,我学过这个吗? 小编工作这么久,Spring框架用了这么久,我咋没见过。 确实,这个SpEl表达小编在工作当中确实没用过,可能特殊的情况需要用到把。

但是,咱们小伙伴都是追求完美的,虽然小编没用过,但是也不代表没用呀,小编大概看了以下SpEl表达式功能还挺多的,大概掌握了解一下还是很有必要的,哈哈哈哈哈嗝~

二、SpEl表达式能干什么?

SpEl表达功能老多了,咱们一一看看,实例操作只是选举一些重要的演示。

先简单介绍一下:

Spring表达式语言(简称:SpEL),是一个支持运行时查询和操作对象的强大表达式语言。

语法类似于EL,SpEl使用#{}作为定界符,所有大括号中的字符都将被认为是SpEl

大概功能:

 - 字面量的表示: 比如来个整数吧:<property name=“count” value=#{555}>,还有小数、科学计算法等等

 - 引用其他Bean对象:原来是使用ref来引用其他Bean的,现在SpEl也可以啦

 - 引用其他Bean对象的属性,还可以调用方法

 - 支持运算符号、比较运算符、逻辑运算符、三元运算符 :比如 +、-、 *、 /、<、>、==等等等,

 - 还有一些细节,小编就不一一介绍了,反正挺多的,但是要说实用吗? 这个小编也不好说

三、实例操作

使用的Bean依旧是我们之前演示的Car、People对象

Car :拥有品牌(brand)、产地(orign)、价格(price)属性。

People:拥有姓名(name),Car对象,新增一个身份(identity)属性

接下来看bean的配置文件,由于功能太多,小编不过多演示,小伙伴需要了解SpEl表达式是个什么,大概有什么用处,就足以,如果工作有需要,则可以深究。

<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-4.0.xsd">

       <!-- 定义一个Car Bean-->
       <bean id="car" class="com.spring.five.Car">
           <!--使用SpEl表达赋值一个字面量-->
           <property name="origin" value="#{'德国'}"></property>
           <property name="price" value="1260000"></property>
           <property name="brand" value="奥迪TT"></property>
       </bean>

        <!-- 定义一个people Bean-->
       <bean id="people" class="com.spring.five.People">
           <property name="name" value="Tom"></property>
           <!--使用SpEl表达引用Bean,不需要使用ref-->
           <property name="car" value="#{car}"></property>
          <!-- 使用SpEl表达式三元运算计算,如果Tom的车价格是大于100000则身份是大地主,否则是小地主,并且引用了Car对象的属性price-->
           <property name="identity" value="#{car.price > 100000 ? '大地主':'小地主'}"></property>
       </bean>

</beans>

最后Main方法运行结果:

public static void main(String[] args) {

        //就这么三行代码,就不要复制了,多手动敲敲

        BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext-five.xml");
        People people = (People)beanFactory.getBean("people");
        System.out.println(people.toString());
    }
十月 30, 2018 10:46:16 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@246b179d: startup date [Tue Oct 30 22:46:16 CST 2018]; root of context hierarchy
十月 30, 2018 10:46:16 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext-five.xml]
People{name='Tom', identity='大地主', car=Car{brand='奥迪TT', origin='德国', price=1260000}}

Process finished with exit code 0