SpringBoot技术实践-SpEL&EL表达式

本文详细介绍了SpringBoot中的SpringEL(SpEL)和EL表达式的基础概念及使用方法,包括如何注入简单值、配置文件属性、列表以及动态注入。强调了SpEL在动态注入和操作集合方面的功能,同时也指出过于复杂的表达式可能带来的排错困难,提倡清晰可读的代码。此外,还讨论了属性自动注入的@ConfigurationProperties注解的使用。
摘要由CSDN通过智能技术生成

一、SpringEL-基础介绍

  1. 什么是SpringEL(SpEL)?Spring3中引入了Spring表达式语言—SpringEL,SpEL是一种强大,简洁的装配Bean的方式SpringEL可以通过运行期间执行的表达式将值装配到我们的属性或构造函数当中SpringEL可以调用JDK中提供的静态常量,获取外部Properties文件中的的配置
  2. 为什么要使用SpringEL?平常通过配置文件或Annotaton注入的Bean,其实都可以称为静态性注入如Bean A中有变量A,它的值需要根据Bean B的B变量为参考,在这场景下静态注入就对这样的处理显得非常无力而Spring3增加的SpringEL就可以完全满足这种需求,而且还可以对不同Bean的字段进行计算再进行赋值,功能非常强大
  3. 如何使用SpringEL?SpringEL从名字来看就能看出和EL是有点关系的,SpringEL的使用和EL表达式的使用非常相似EL表达式在JSP页面更方便地获取后台中的值,而SpringEL就是为了更方便获取Spring容器中的Bean的值EL使用${},而SpringEL使用#{}进行表达式的声明
  4. 两者主要区别$是去找外部配置的参数,将值赋过来#是SpEL表达式,去寻找对应变量的内容也可以直接使用@value("常量")注入不使用EL,这样写法与直接赋值等价
  5. 如果是在Spring中使用可以使用@PropertySource("classpath:my.properties")加载对应配置文件

二、EL表达式-基础使用

# 配置文件
com:
  codecoord:
    el:
      num: 1001
      name: el
      language:
        - java
        - spring
        - mysql
        - linux
      # 逗号分隔可以注入列表
      language02: java,spring,mysql,linux
  1. 使用EL注入简单值
/**
 * 注入简单值,直接注入不使用EL,EL不支持直接指定常量
 * 直接在EL中指定的常量会当做配置处理,和直接赋值等价
 */
@Value("1432516744")
private Integer no;
  1. 注入配置文件属性值
/**
 * 注入整型属性值
 */
@Value("${com.codecoord.el.num}")
private Integer num;
/**
 * 注入字符属性值
 */
@Value("${com.codecoord.el.name}")
private String name;
  1. 注入默认值
/**
 * 注入字符不存在属性值并指定默认值,默认值使用过冒号分隔 :
 * 注入常量其实就可以指定一个不存在的配置然后使用默认值,此处skill的值为java
 */
@Value("${com.codecoord.el.skill:java}")
private String skill;
  1. 注入列表不支持直接配置文件中数组语法格式注入列表可以识别使用逗号,分隔的配置,spring默认以,分隔
// 错误写法:不支持直接注入yml列表格式语法列表
@Value("${com.codecoord.el.language}")
private List<String> listLanguage;
@Value("${com.codecoord.el.language}")
private String[] strLanguage;

/**
 * 支持,分隔的注入列表
 */
@Value("${com.codecoord.el.language02}")
private List<String> listLanguage02;
@Value("${com.codecoord.el.language02}")
private String[] strLanguage02;
  1. 完整参考如下配置文件
server:
  port: 8888
com:
  codecoord:
    el:
      num: 1001
      name: el
      language:
        - java
        - spring
        - mysql
        - linux
      # 逗号分隔可以注入列表
      language02: java,spring,mysql,linux
  • 属性配置类
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.List;

@Data
@Component
public class ElConfig {
    /**
     * 注入简单
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值