Spring框架:第五章:Spring EL表达式

简介: Spring框架:第五章:Spring EL表达式

SpEL简介

Spring Expression Language,Spring表达式语言,简称SpEL。支持运行时查询并可以操作对象图。

和JSP页面上的EL表达式、Struts2中用到的OGNL表达式一样,SpEL根据JavaBean风格的getXxx()、setXxx()方法定义的属性访问对象图,完全符合我们熟悉的操作习惯。

基本语法

SpEL使用#{…}作为定界符,所有在大框号中的字符都将被认为是SpEL表达式。

使用字面量

●整数:<property name="count" value="#{5}"/>
●小数:<property name="frequency" value="#{89.7}"/>
●科学计数法:<property name="capacity" value="#{1e4}"/>
●String类型的字面量可以使用单引号或者双引号作为字符串的定界符号
<property name=“name” value="#{'Chuck'}"/>
<property name='name' value='#{"Chuck"}'/>
●Boolean:<property name="enabled" value="#{false}"/>

引用其他bean

<bean id="emp04" class="com.parent.bean.Employee">
  <property name="empId" value="1003"/>
  <property name="empName" value="Kate"/>
  <property name="age" value="21"/>
  <property name="detp" value="#{dept}"/>
</bean>

引用其他bean的属性值作为自己某个属性的值

<bean id="emp05" class="com.parent.bean.Employee">
  <property name="empId" value="1003"/>
  <property name="empName" value="Kate"/>
  <property name="age" value="21"/>
  <property name="deptName" value="#{dept.deptName}"/>
</bean>

调用非静态方法

<!-- 创建一个对象,在SpEL表达式中调用这个对象的方法 -->
<bean id="salaryGenerator" class="com.spel.bean.SalaryGenerator"/>
<bean id="employee" class="com.spel.bean.Employee">
  <!-- 通过对象方法的返回值为属性赋值 -->
  <property name="salayOfYear" value="#{salaryGenerator.getSalaryOfYear(5000)}"/>
</bean>

调用静态方法

<bean id="employee" class="com.spel.bean.Employee">
  <!-- 在SpEL表达式中调用类的静态方法 -->
  <property name="circle" value="#{T(java.lang.Math).PI*20}"/>
</bean>

运算符

①算术运算符:+、-、*、/、%、^

②字符串连接:+

③比较运算符:<、>、==、<=、>=、lt、gt、eq、le、ge

④逻辑运算符:and, or, not, |

⑤三目运算符:判断条件?判断结果为true时的取值:判断结果为false时的取值

⑥正则表达式:matches

创建java实体Bean对象

public class Person {
  private int id;
  private String name;
  private String phone;
  private double salary;
  private Car car;
public class Car {
  private String name;
  private String carNo;

实验26:[SpEL测试I]在SpEL中使用字面量

使用格式:#{数值} #{“字符串” || ‘字符串’}

实验27:[SpEL测试II]在SpEL中引用其他bean

使用格式:#{bean的id}

实验28:[SpEL测试III]在SpEL中引用其他bean的某个属性值

使用格式: #{bean.属性名}

实验29:[SpEL测试IV]在SpEL中调用非静态方法

使用格式: #{bean.方法名(参数)}

实验30:[SpEL测试V]在SpEL中调用静态方法

使用格式:#{T(全名类).方法名(参数)}

实验31:[SpEL测试VI]在SpEL中使用运算符

使用格式:#{表达式}

<?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 id="car" class="com.atguigu.pojo.Car">
    <property name="carNo" value="京B143122" />
    <property name="name" value="蓝波基泥" />
  </bean>
  <!-- 实验26:[SpEL测试I]在SpEL中使用字面量 -->
  <!-- 使用格式:#{数值}     #{“字符串” || ‘字符串’} -->
  <bean id="p1" class="com.atguigu.pojo.Person">
    <property name="id" value="#{1}" />
    <!--    <property name="name" value="#{'这是el的字符串'}" /> -->
    <!-- 实验27:[SpEL测试II]在SpEL中引用其他bean -->
    <!-- 使用格式:#{bean的id} -->
    <property name="car" value="#{car}" />
    <!-- 实验28:[SpEL测试III]在SpEL中引用其他bean的某个属性值 -->
    <!-- 使用格式: #{bean.属性名} -->
<!--    <property name="name" value="#{car.name}"/> -->
    <!-- 实验29:[SpEL测试IV]在SpEL中调用非静态方法 -->
    <!-- 使用格式: #{bean.方法名(参数)} -->    
<!--    <property name="name" value="#{car.fun()}" /> -->
    <!-- 实验30:[SpEL测试V]在SpEL中调用静态方法 -->
    <!-- 使用格式:#{T(全名类).方法名(参数)} -->
    <property name="name" value="#{T(com.atguigu.pojo.Car).fun2()}" />
    <!-- 实验31:[SpEL测试VI]在SpEL中使用运算符 -->
    <!-- 使用格式:#{表达式} -->
    <property name="salary" value="#{10000*20}" />
  </bean>
</beans>

测试类:

public class SpringTest {
  @Test
  public void test1() throws Exception {
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    Person person = (Person) applicationContext.getBean("p1");
    System.out.println( person );
  }
}
相关文章
|
12天前
|
安全 Java Ruby
我尝试了所有后端框架 — — 这就是为什么只有 Spring Boot 幸存下来
作者回顾后端开发历程,指出多数框架在生产环境中难堪重负。相比之下,Spring Boot凭借内置安全、稳定扩展、完善生态和企业级支持,成为构建高可用系统的首选,真正经受住了时间与规模的考验。
102 2
|
3月前
|
Java Spring
聊聊你对SpringBoot框架的理解 ?
SpringBoot是Spring家族中流行的子项目,旨在简化Spring框架开发的繁琐配置。它主要提供三大功能:starter起步依赖简化依赖管理,自动配置根据条件创建Bean,以及内嵌Web服务器支持Jar包运行,极大提升了开发效率。
141 0
|
3月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
399 0
|
3月前
|
NoSQL Java 数据库连接
SpringBoot框架
Spring Boot 是 Spring 家族中最流行的框架,旨在简化 Spring 应用的初始搭建与开发。它通过自动配置、起步依赖和内嵌服务器三大核心功能,大幅减少配置复杂度,提升开发效率。开发者可快速构建独立运行的 Web 应用,并支持多种数据访问技术和第三方集成。
|
3月前
|
缓存 安全 Java
Spring 框架核心原理与实践解析
本文详解 Spring 框架核心知识,包括 IOC(容器管理对象)与 DI(容器注入依赖),以及通过注解(如 @Service、@Autowired)声明 Bean 和注入依赖的方式。阐述了 Bean 的线程安全(默认单例可能有安全问题,需业务避免共享状态或设为 prototype)、作用域(@Scope 注解,常用 singleton、prototype 等)及完整生命周期(实例化、依赖注入、初始化、销毁等步骤)。 解析了循环依赖的解决机制(三级缓存)、AOP 的概念(公共逻辑抽为切面)、底层动态代理(JDK 与 Cglib 的区别)及项目应用(如日志记录)。介绍了事务的实现(基于 AOP
123 0
|
3月前
|
存储 缓存 NoSQL
Spring Cache缓存框架
Spring Cache是Spring体系下的标准化缓存框架,支持多种缓存(如Redis、EhCache、Caffeine),可独立或组合使用。其优势包括平滑迁移、注解与编程两种使用方式,以及高度解耦和灵活管理。通过动态代理实现缓存操作,适用于不同业务场景。
323 0
|
3月前
|
消息中间件 NoSQL Java
SpringBoot框架常见的starter你都用过哪些 ?
本节介绍常见的Spring Boot Starter,分为官方(如Web、AOP、Redis等)与第三方(如MyBatis、MyBatis Plus)两类,用于快速集成Web开发、数据库、消息队列等功能。
248 0
|
3月前
|
缓存 安全 Java
第五章 Spring框架
第五章 Spring框架
|
3月前
|
缓存 Java 数据库
第五章 Spring框架
第五章 Spring框架
|
3月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
284 0