Spring SpEL语言
1. SpEL语言
Spring动态表达式语言(SpEL)是一个支持运行时查询和操作对象图的强大动态语言。
2. SpEL核心接口
SpEL的相关内容位于Spring框架的expression模块
- spring-context 包含有 spring-expression。若已经引入 spring-context,则无需引入 spring-expression。
2.1 ExpressionParse接口
- 解析表达式字符串(一个用单引号标注或者用转义的双引号标注的字符串)
2.2 EvaluationContext接口
- 提供属性、方法、字段解析器以及类型转换器。
3. SpEL基础表达式
3.1 文本字符解析
- 文本表达式支持字符串,日期,字符,布尔类型以及null。
- 字符串需要使用单引号或者反斜杠+双引号包含起来
3.2 对象属性解析
- EvaluationContext接口通过反射来操作对象
String nation=parser.parseExpression("placeOfBirth.nation").getValue(context,String.class);
String nation=parser.parseExpression("placeOfBirth.nation").getValue(user,String.class);
两种方式得到的结果相同,但是不使用context就需要每次对user对象进行反射,效率低下。而context可以通过缓存来提高效率。
3.3 数组和集合解析
- SpEL支持数组,集合类型(Map、List)的解析。
- 数组:支持标准Java语言创建数组的方法
- List:支持大括号括起来的内容,数据项之间用逗号隔开
- Map:支持{key : XXX , value : XXX}
3.4 方法解析
- SpEL中方法调用
- 支持Java可以访问的方法(对象方法,静态方法(通过SpEL提供的T类型操作符 -> T(包名)方法名,直接调用java.lang.Math的静态方法))
- 支持可变方法参数
- 支持调用 String类型的所有可访问的方法。
4. Spring中使用SpEL
4.1 XML配置
- Spring中内置了 systemProperties 和 systemEnvironment 两个Bean
- systemProperties:获取系统属性变量值
- System.getProperties();
- systemEnvironment:获取系统环境变量值
- System.getenv();
- systemProperties:获取系统属性变量值
4.2 注解配置
- @Value注解可以标注在类的属性、方法、构造函数上