前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring 表达式语言(SpEL)

Spring 表达式语言(SpEL)

作者头像
瑞新
发布2020-07-07 18:28:42
9910
发布2020-07-07 18:28:42
举报

最近总想着发点什么,一直没时间 发个干货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

代码语言:javascript
复制
	private String city;
	private String street;

Car.java

代码语言:javascript
复制
	private String brand;
	private double price;
	//轮胎周长
	private double tyrePerimeter;

Person.java

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

Bean-spel.xml

代码语言:javascript
复制
<?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

代码语言:javascript
复制
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=金领]
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档