`

Spring SPEL 表达式

 
阅读更多

SPEL 详细说明:

http://docs.spring.io/spring/docs/4.3.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#expressions

 

例子:

 

Address.java

package com.spring.spel;

public class Address {
	private String city;
	private String street;

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public String getStreet() {
		return street;
	}

	public void setStreet(String street) {
		this.street = street;
	}

	@Override
	public String toString() {
		return "Address [city=" + city + ", street=" + street + "]";
	}

}

 Car.java

package com.spring.spel;

public class Car {
	private String brand;
	private double price;
	private double tyrePerimeter;
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public double getTyrePerimeter() {
		return tyrePerimeter;
	}
	public void setTyrePerimeter(double tyrePerimeter) {
		this.tyrePerimeter = tyrePerimeter;
	}
	@Override
	public String toString() {
		return "Car [brand=" + brand + ", price=" + price + ", tyrePerimeter=" + tyrePerimeter + "]";
	}
}

 Person.java

package com.spring.spel;

public class Person {
	private String name;
	private Car car;
	//引用ddress bean的city属性
	private String city;
	//根据car的price 确定info: car的price > 300000
	private String info;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Car getCar() {
		return car;
	}
	public void setCar(Car car) {
		this.car = car;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", car=" + car + ", city=" + city + ", info=" + info + "]";
	}
	
	
}

 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"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 使用SpEL 来为属性赋值 -->
<bean id="address" class="com.spring.spel.Address" p:city="#{'SH'}" p:street="lianHangRoad" />
<!-- 使用SpEL 来引用类的静态属性 -->
<bean id="car" class="com.spring.spel.Car" p:brand="AUDI" p:price="#{200000}" p:tyrePerimeter="#{T(java.lang.Math).PI*2*80}" > </bean>
<!-- 1. 使用SpEL 来应用其他Bean的属性—>p:city.  2.  使用SpEL 来应用其他Bean->p:car 3. 使用SpEL 运算算术符 -->
<bean id="person" class="com.spring.spel.Person"
 	 p:city="#{address.city}"   
 	 p:car="#{car}" 
 	 p:name="#{'Matt'}" 
 	 p:info="#{car.price > 300000 ? '白领' : '蓝领'}" />

</beans>

 Main.java

package com.spring.spel;

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

public class Main {

	public static void main(String[] args) {
		ApplicationContext ext = new ClassPathXmlApplicationContext("spEL.xml");
		Address address = (Address) ext.getBean("address");
		System.out.println(address);
		
		Car car = (Car) ext.getBean("car");
		System.out.println(car);
		
		Person person = (Person) ext.getBean("person");
		System.out.println(person);
	}

}

 运行结果:

Address [city=SH, street=lianHangRoad]
Car [brand=AUDI, price=200000.0, tyrePerimeter=502.6548245743669]
Person [name=Matt, car=Car [brand=AUDI, price=200000.0, tyrePerimeter=502.6548245743669], city=SH, info=蓝领]

 

分享到:
评论

相关推荐

    spring spEL 表达式详解

    - Spring框架提供了`org.springframework.expression.spel.standard.SpelExpressionParser`类来解析SpEL表达式。 - 通过`parseExpression(String expression)`方法解析表达式,然后使用`getValue(Object root...

    Spring_SpEl表达式使用用例

    **Spring SpEL表达式使用详解** Spring Expression Language (SpEL)是Spring框架中的一种强大而灵活的表达式语言,主要用于在运行时查询和操作对象图。它提供了在配置元数据中进行表达式评估的能力,使得我们可以...

    Spring spel表达式使用方法示例

    Spring spel表达式使用方法示例 Spring spel表达式是一种功能强大且灵活的表达式语言,它允许开发者在Spring应用程序中使用表达式来实现复杂的逻辑操作。 Spring spel表达式可以用于引用bean、调用方法、计算表达式...

    Spring组件开发模式支持SPEL表达式

    Spring组件开发模式支持SPEL表达式 Spring框架作为Java企业级应用程序的主流框架,提供了强大的组件开发模式,支持SPEL(Spring Expression Language)表达式,使得开发者能够更加灵活地使用表达式来实现业务逻辑。...

    Spring Cloud Gateway Actuator API SpEL表达式注入命令执行 0day 漏洞复现

    漏洞的根源在于Spring Cloud Gateway Actuator API 对用户输入的参数没有进行充分的验证和过滤,这使得攻击者可以通过构造恶意的SpEL表达式来执行任意系统命令。例如,当Actuator的某个端点接受到包含SpEL表达式的...

    Spring表达式语言中文参考手册.docx

    ### Spring 表达式语言 (SpEL) 中文参考手册概览 #### 一、Spring SpEL 概念与用途 Spring SpEL(Spring Expression Language)是一种强大的表达式语言,用于处理运行时查询和操作对象图。SpEL 的设计目标是提供一...

    SPRING CLOUD FUNCTION SPEL表达式注入漏洞测试服务端程序

    用于Spring Cloud Function SPEL表达式注入漏洞测试环境搭建,是编译好的服务端程序,命令号java -jar *.jar运行即可,服务端运行在127.0.0.1:8080端口

    spring-boot-annotation-spel.zip

    本压缩包“spring-boot-annotation-spel.zip”显然是关于如何在自定义注解中运用SPEL表达式的实例教程。 SPEL是Spring框架提供的一种强大的表达式语言,用于在运行时查询和操作对象图。它允许我们执行各种操作,如...

    CVE-2022-22947 SpringCloud GateWay SpEL RCE.doc

    该漏洞的成因是SpringCloud GateWay在处理SpEL表达式时没有正确地验证用户输入,导致攻击者可以注入恶意的SpEL表达式,并执行任意系统命令。 三、漏洞复现 要复现该漏洞,需要以下步骤: 1. 环境准备:下载Kotlin...

    Spring实战之Bean定义中的SpEL表达式语言支持操作示例

    ### SpEL表达式语言基础 SpEL是一种表达式语言,可以在运行时构建复杂表达式、存取对象属性、调用方法、访问数组、集合和索引器的内容,甚至可以调用静态方法或常量。 ### Spring配置文件中的SpEL使用 在Spring...

    基于SpringBoot、Spring表达式语言 (SpEL)、annotation的操作日志框架+源代码+文档说明

    基于SpringBoot、Spring表达式语言 (SpEL)、annotation的操作日志 ### 简介 * 使用annotation来标注方法,标记操作内容 * 使用SpEL来动态生成操作日志内容,使操作日志记录更加详细(记录操作内容ID等关键信息) * ...

    SpringCloud Function SpEL注入漏洞分析(CVE-2022-22963).doc

    SpEL(Spring Expression Language)是一种强大的表达式语言,用于在 Spring 框架中定义和执行复杂的业务逻辑。然而,在 SpringCloud Function 中,SpEL 的使用存在安全隐患。当攻击者可以控制 SpEL 表达式时,可能...

    Spring表达式语言.pdf

    SpEL使用`#{...}`作为定界符,即任何位于大括号`#{}`中的内容都将被解释为SpEL表达式。 ##### 字面量表示 SpEL支持多种类型的字面量表示: 1. **整数**:可以直接在SpEL表达式中使用整数值。 ```xml ``` 2. *...

    如何使用SpEL表达式实现动态分表查询

    使用SpEL表达式实现动态分表查询 在实际工作中,数据量较大时,需要将数据按年份进行分表,表结构都是一致的。例如现在有两张表分别表示2017年和2018年数据表中只有id和name两个字段。为了解决这个问题,需要使用...

    Spring开发手册_表达式语言_API中文版

    **Spring 表达式语言(SpEL)API 中文版** Spring 表达式语言(Spring Expression Language,简称 SpEL)是 Spring 框架中一个强大的表达式系统,用于在运行时查询和操作对象图。它允许动态访问和修改对象属性、...

    krislinzhao#StudyNotes#3.6.使用SpEL表达式加载配置项1

    一、创建Spring Boot应用 二、SpEL结合@Value注解读取配置文件属性 三、SpEL结合 @Value注解读取系统环境变量 四、配置文件的占位符

    36 SpEL 正则表达式应用示例及背后原理探究慕课专栏1

    在实际应用中,当我们执行包含正则表达式的SpEL表达式时,Spring框架会按照一定的顺序初始化和执行上下文。例如,在上述代码中,我们可能有一个配置文件`applicationContext.xml`,这个文件会被`...

    spring3.0.2api 文档spring表达式语言

    9. **EL解析器**:Spring提供API来解析和执行SpEL表达式,例如`StandardEvaluationContext`和`ExpressionParser`。 10. **SpEL在AOP中的应用**:在Spring AOP中,SpEL常用于定义切入点表达式,允许基于方法参数、...

    Spring表达式语言SpEL用法详解

    Spring表达式语言SpEL用法详解 Spring表达式语言SpEL是一种强大的表达式语言,支持运行时查询和操作对象图。SpEL使用#{...}作为定界符,所有在大括号中的字符串均被认为是SpEL。SpEL为bean的属性进行动态赋值提供了...

Global site tag (gtag.js) - Google Analytics