一、引言
小编第一眼看见这个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