Spring 表达式语言(SpEL)

最近总想着发点什么,一直没时间
发个干货SPLE证明我还活着……佛系修仙ing

Spring表达式语言(简称SpEL)是一个支持运行时查询和操作对象图的强大的表达式语言。其语法类似于统一EL,但提供了额外特性,显式方法调用和基本字符串模板函数。

同很多可用的Java 表达式语言相比,例如OGNL,MVEL和JBoss
EL,SpEL的诞生是为了给Spring社区提供一个可以给Spring目录中所有产品提供单一良好支持的表达式语言。其语言特性由Spring目录中的项目需求驱动,包括基于eclipse的SpringSource套件中的代码补全工具需求。那就是说,SpEL是一个基于技术中立的API允许需要时与其他表达式语言集成。
SpEL作为Spring目录中表达式求值的基础,它并不是直接依赖于Spring而是可以被独立使用。为了能够自包含,本章中的许多示例把SpEL作为一个独立的表达式语言来使用。这就需要创建一些如解析器的引导基础组件类。大多数Spring用户只需要为求值编写表达式字符串而不需要关心这些基础组件。一个典型的使用例子是集成SpEL和创建基于XML或注解的bean定义

效果图
在这里插入图片描述

这是一个很干货的测试
Address.java

	private String city;
	private String street;

Car.java

	private String brand;
	private double price;
	//轮胎周长
	private double tyrePerimeter;

Person.java

	private String name;
	private Car car;
	//引用address的Bean的city属性
	private String city;
	//通过Car的price确定工作地位: car的price >= 30000 金领
	//否则为白领
	private String info;

Bean-spel.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">
	
	<bean class="com.benny.spring.bean.spel.Address" id="address">
<!-- 		使用spel字面值 -->
		<property name="city" value="#{'beijing'}"></property>
		<property name="street" value="wudaokou"></property>
	</bean>


	<bean class="com.benny.spring.bean.spel.Car" id="car">
		<property name="brand" value="一汽"></property>
		<property name="price" value="5000000"></property>
<!-- 		使用spel引用类的静态属性 -->
		<property name="tyrePerimeter" value="#{T(java.lang.Math).PI * 80}"></property>
	</bean>
	
	<bean class="com.benny.spring.bean.spel.Person" id="person">
<!-- 		引用其他的Bean 相当于ref -->
		<property name="car" value="#{car}"></property>
<!-- 		引用其他的属性 -->
		<property name="city" value="#{address.city}"></property>
<!-- 		比较运算符 -->
		<property name="info" value="#{car.price > 30000? '金领' : '白领'}"></property>
		
		<property name="name" value="zhangsan"></property>
		
		
	</bean>	
</beans>

Main.java

package com.benny.spring.bean.spel;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("bean-spel.xml");
		Address address = (Address) ctx.getBean("address");
		System.out.println(address);
		
		Car car = (Car) ctx.getBean("car");
		System.out.println(car);
		
		
		Person person = (Person) ctx.getBean("person");
		System.out.println(person);
	}
}

四月 13, 2019 9:05:52 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6193b845: startup date [Sat Apr 13 21:05:52 CST 2019]; root of context hierarchy
四月 13, 2019 9:05:52 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [bean-spel.xml]
Address [city=beijing, street=wudaokou]
Car [brand=一汽, price=5000000.0, tyrePerimeter=251.32741228718345]
Person [name=zhangsan, car=Car [brand=一汽, price=5000000.0, tyrePerimeter=251.32741228718345], city=beijing, info=金领]

猜你喜欢

转载自blog.csdn.net/weixin_43469680/article/details/89289069