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框架提供了`org.springframework.expression.spel.standard.SpelExpressionParser`类来解析SpEL表达式。 - 通过`parseExpression(String expression)`方法解析表达式,然后使用`getValue(Object root...
**Spring SpEL表达式使用详解** Spring Expression Language (SpEL)是Spring框架中的一种强大而灵活的表达式语言,主要用于在运行时查询和操作对象图。它提供了在配置元数据中进行表达式评估的能力,使得我们可以...
Spring spel表达式使用方法示例 Spring spel表达式是一种功能强大且灵活的表达式语言,它允许开发者在Spring应用程序中使用表达式来实现复杂的逻辑操作。 Spring spel表达式可以用于引用bean、调用方法、计算表达式...
Spring组件开发模式支持SPEL表达式 Spring框架作为Java企业级应用程序的主流框架,提供了强大的组件开发模式,支持SPEL(Spring Expression Language)表达式,使得开发者能够更加灵活地使用表达式来实现业务逻辑。...
漏洞的根源在于Spring Cloud Gateway Actuator API 对用户输入的参数没有进行充分的验证和过滤,这使得攻击者可以通过构造恶意的SpEL表达式来执行任意系统命令。例如,当Actuator的某个端点接受到包含SpEL表达式的...
### Spring 表达式语言 (SpEL) 中文参考手册概览 #### 一、Spring SpEL 概念与用途 Spring SpEL(Spring Expression Language)是一种强大的表达式语言,用于处理运行时查询和操作对象图。SpEL 的设计目标是提供一...
用于Spring Cloud Function SPEL表达式注入漏洞测试环境搭建,是编译好的服务端程序,命令号java -jar *.jar运行即可,服务端运行在127.0.0.1:8080端口
本压缩包“spring-boot-annotation-spel.zip”显然是关于如何在自定义注解中运用SPEL表达式的实例教程。 SPEL是Spring框架提供的一种强大的表达式语言,用于在运行时查询和操作对象图。它允许我们执行各种操作,如...
该漏洞的成因是SpringCloud GateWay在处理SpEL表达式时没有正确地验证用户输入,导致攻击者可以注入恶意的SpEL表达式,并执行任意系统命令。 三、漏洞复现 要复现该漏洞,需要以下步骤: 1. 环境准备:下载Kotlin...
### SpEL表达式语言基础 SpEL是一种表达式语言,可以在运行时构建复杂表达式、存取对象属性、调用方法、访问数组、集合和索引器的内容,甚至可以调用静态方法或常量。 ### Spring配置文件中的SpEL使用 在Spring...
基于SpringBoot、Spring表达式语言 (SpEL)、annotation的操作日志 ### 简介 * 使用annotation来标注方法,标记操作内容 * 使用SpEL来动态生成操作日志内容,使操作日志记录更加详细(记录操作内容ID等关键信息) * ...
SpEL(Spring Expression Language)是一种强大的表达式语言,用于在 Spring 框架中定义和执行复杂的业务逻辑。然而,在 SpringCloud Function 中,SpEL 的使用存在安全隐患。当攻击者可以控制 SpEL 表达式时,可能...
SpEL使用`#{...}`作为定界符,即任何位于大括号`#{}`中的内容都将被解释为SpEL表达式。 ##### 字面量表示 SpEL支持多种类型的字面量表示: 1. **整数**:可以直接在SpEL表达式中使用整数值。 ```xml ``` 2. *...
使用SpEL表达式实现动态分表查询 在实际工作中,数据量较大时,需要将数据按年份进行分表,表结构都是一致的。例如现在有两张表分别表示2017年和2018年数据表中只有id和name两个字段。为了解决这个问题,需要使用...
**Spring 表达式语言(SpEL)API 中文版** Spring 表达式语言(Spring Expression Language,简称 SpEL)是 Spring 框架中一个强大的表达式系统,用于在运行时查询和操作对象图。它允许动态访问和修改对象属性、...
一、创建Spring Boot应用 二、SpEL结合@Value注解读取配置文件属性 三、SpEL结合 @Value注解读取系统环境变量 四、配置文件的占位符
在实际应用中,当我们执行包含正则表达式的SpEL表达式时,Spring框架会按照一定的顺序初始化和执行上下文。例如,在上述代码中,我们可能有一个配置文件`applicationContext.xml`,这个文件会被`...
9. **EL解析器**:Spring提供API来解析和执行SpEL表达式,例如`StandardEvaluationContext`和`ExpressionParser`。 10. **SpEL在AOP中的应用**:在Spring AOP中,SpEL常用于定义切入点表达式,允许基于方法参数、...
Spring表达式语言SpEL用法详解 Spring表达式语言SpEL是一种强大的表达式语言,支持运行时查询和操作对象图。SpEL使用#{...}作为定界符,所有在大括号中的字符串均被认为是SpEL。SpEL为bean的属性进行动态赋值提供了...