一、SpringEL-基础介绍
- 什么是SpringEL(SpEL)?Spring3中引入了Spring表达式语言—SpringEL,SpEL是一种强大,简洁的装配Bean的方式SpringEL可以通过运行期间执行的表达式将值装配到我们的属性或构造函数当中SpringEL可以调用JDK中提供的静态常量,获取外部Properties文件中的的配置
- 为什么要使用SpringEL?平常通过配置文件或Annotaton注入的Bean,其实都可以称为静态性注入如Bean A中有变量A,它的值需要根据Bean B的B变量为参考,在这场景下静态注入就对这样的处理显得非常无力而Spring3增加的SpringEL就可以完全满足这种需求,而且还可以对不同Bean的字段进行计算再进行赋值,功能非常强大
- 如何使用SpringEL?SpringEL从名字来看就能看出和EL是有点关系的,SpringEL的使用和EL表达式的使用非常相似EL表达式在JSP页面更方便地获取后台中的值,而SpringEL就是为了更方便获取Spring容器中的Bean的值EL使用${},而SpringEL使用#{}进行表达式的声明
- 两者主要区别$是去找外部配置的参数,将值赋过来#是SpEL表达式,去寻找对应变量的内容也可以直接使用@value("常量")注入不使用EL,这样写法与直接赋值等价
- 如果是在Spring中使用可以使用@PropertySource("classpath:my.properties")加载对应配置文件
二、EL表达式-基础使用
# 配置文件
com:
codecoord:
el:
num: 1001
name: el
language:
- java
- spring
- mysql
- linux
# 逗号分隔可以注入列表
language02: java,spring,mysql,linux
- 使用EL注入简单值
/**
* 注入简单值,直接注入不使用EL,EL不支持直接指定常量
* 直接在EL中指定的常量会当做配置处理,和直接赋值等价
*/
@Value("1432516744")
private Integer no;
- 注入配置文件属性值
/**
* 注入整型属性值
*/
@Value("${com.codecoord.el.num}")
private Integer num;
/**
* 注入字符属性值
*/
@Value("${com.codecoord.el.name}")
private String name;
- 注入默认值
/**
* 注入字符不存在属性值并指定默认值,默认值使用过冒号分隔 :
* 注入常量其实就可以指定一个不存在的配置然后使用默认值,此处skill的值为java
*/
@Value("${com.codecoord.el.skill:java}")
private String skill;
- 注入列表不支持直接配置文件中数组语法格式注入列表可以识别使用逗号,分隔的配置,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;
- 完整参考如下配置文件
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 {
/**
* 注入简单