spring boot 最佳实践(五)--SpEL
来源:互联网 发布:家用电脑是单片机吗 编辑:程序博客网 时间:2024/06/07 05:49
SpEL 拥有许多特性,包括:
表达式语言支持以下功能
- 文字表达式
- 引用Bean属性和方法
- 类表达式
- 访问 properties, arrays, lists, maps
- 布尔和关系运算符
- 正则表达式
- 方法调用
- 关系运算符
- 参数
- 调用构造函数
- 构造Array
- 内嵌lists
- 内嵌maps
- 三元运算符
- 变量
- 用户定义的函数
- 集合投影
- 集合筛选
- 模板表达式
基本语法
#{ } 标记会提示Spring 这个标记里的内容是SpEL表达式。#{rootBean.nestBean.propertiy} “.”操作符表示属性或方法引用,支持层次调用#{aList[0] } 数组和列表使用方括号获得内容#{aMap[key] } maps使用方括号获得内容#{rootBean?.propertiy} 此处"?"是安全导航运算符器,避免空指针异常#{condition ? trueValue : falseValue} 三元运算符(IF-THEN-ELSE)#{valueA?:defaultValue} Elvis操作符,当valueA为空时赋值defaultValue
使用SpEL装配Bean
spring支持通过运行期执行的表达式将值装配到Bean的属性或构造器参数中。spring boot默认使用基于注解的配置,@Value注解可以在域,方法和方法/构造器参数中使用来指定一个默认值。
//import org.springframework.beans.factory.annotation.Value;@Value("#{xxxx}")private String attribute1;
目前在配置经常使用@Value(“${xxxx}”)
其中$表示获取配置参数
1. 文字表达式
@Value("#{24}") //整型@Value("#{'中国'}") //String//里面有个单引号,如果去掉会报错。String 类型的字面值可以使用单引号或双引号作为字符串的界定符。@Value("my name is #{'david'}") //与非SpEL 表达式的值混用@Value("#{120.4}") //浮点型数字@Value("#{true}") //布尔值
2. 引用Bean属性和方法
@Value("#{beanId}") //使用Bean ID 将一个Bean 装配到另一个Bean 的属性中@Value("#{beanId.attribute}") //使用Bean 的引用来获取Bean 的属性@Value("#{beanId.getSomenthing()}") //调用引用Bean的方法
3. 类表达式
SpEL使用T() 运算符调用类作用域的方法和常量。
@Value("#{T(java.lang.Math).PI}") @Value("#{T(java.lang.Math).random()}") @Value("#{T(java.lang.Math).random() * 100.0 }")
4. 访问 properties
spel有两个可用的预定义变量 “systemProperties” 和 “systemEnvironment”。
- systemProperties — java.util.Properties对象,从运行环境中检索属性。相当于java代码System.getProperty(arg0)
- systemEnvironment — java.util.Properties对象,检索运行环境的具体属性。相当于java代码System.getenv(arg0)
@Value("#{ systemProperties['user.region'] }")@Value("#{ systemEnvironment['profile'] }")
使用Spring的表达接口求值
下面的代码使用SpEL API来解析文本字符串表达式 Hello World.
ExpressionParser parser = new SpelExpressionParser();Expression exp = parser.parseExpression("'Hello World'");String message = (String) exp.getValue(); // "hello world"exp = parser.parseExpression("'Hello World'.concat('!')");message = (String) exp.getValue();// "Hello World!"
模板数据绑定
#用户评分SCORE=auditInfo.auditInfo==null?"":auditInfo.auditInfo["score"]#渠道号CHANNEL_NO=auditInfo.artificialAuditInfo.channelNo#渠道名称CHANNEL_NAME=auditInfo.artificialAuditInfo.channelName
Map<String, Expression> expressions = new HashMap<>();propertis.keySet().forEach( k -> expressions.put(k, parser.parseExpression(propertis.getString(k))));Map<String, Object> target = new HashMap<>();expressions.keySet().forEach(key -> target.put(key, expressions.get(key).getValue(origin))});
参考
http://itmyhome.com/spring/expressions.html
阅读全文
0 0
- spring boot 最佳实践(五)--SpEL
- spring boot 最佳实践(四)--Spring MVC
- spring boot 最佳实践(六)--Spring Cache
- spring boot 最佳实践(七)-- spring-retry
- spring boot 最佳实践(一)--使用jackson
- spring boot 最佳实践(二)--使用Bean Validation
- spring boot 最佳实践(三)--使用java.time
- spring boot 最佳实践(九)-- 数据访问权限
- spring boot 最佳实践(八)-- 请求上下文注入
- Spring boot(五)
- RocketMQ最佳实践(三)开发spring-boot-starter-rocketmq实现与spring boot项目的整合
- Spring Boot 实践折腾记(五):自定义配置,扩展Spring MVC配置并使用fastjson
- (四)Spring SPEL表达式
- activeMQ实践(五)--企业系统的最佳实践
- spring Boot测试的最佳实践和测试架构的启发(JUnit4和mockito,包括MockMvc)
- Spring 配置最佳实践
- spring AOP 最佳实践
- Spring Boot框架Whitelabel Error Page SpEL注入漏洞分析
- Metarial design侧滑栏之Navigation Drawer
- CMakeLists.txt编写和使用方法
- 欢迎使用CSDN-markdown编辑器
- Compare Version Numbers
- 如何上传本地代码到github-简洁版
- spring boot 最佳实践(五)--SpEL
- 最全面的Android导航模式解析
- Pandas学习笔记二(Pandas对象的基本方法)
- IO流-常用的IO流总结
- mingW编译器不支持webenginewidgets模块
- Java环境配置
- 广工校园网Dr.Com Linux版本安装教程
- Java精选笔记_HTTP协议
- 常用算法之快速排序