Spring @Value SpEl 知识点小记
在JavaBean文件中使用Spring的@Value注解获取配置文件.yml或资源文件.properties中 key - value 键值信息
@Value("${stu.number}")
private String number;
当键值为 number: 00201000331100 number为String 类型
如果value值不为0开头,则数据可以正常解析;
如果value值为0开头,则数据会按数字类型(进制转换)进行解析 00201000331100 被解析成 17314198080
这里有两组数据:
第一组数据:按照八进制解析成十进制
00201000331100 八进制
17314198080 十进制
第二组数据: 直接解析成十进制
020099200049 十进制
2.0099200049E10 十进制
那么我们想要解析的是字符串怎么办?
只要在value值中添加双引号即可按照字符串正常解析,具体的解析原理要去看@Value注解的解析过程相关源码
number: "00201000331100"
#################################################################
鉴于对以上两组数据解析方式的不同,引发深度思考,最终将问题定位于SpEl表达式解析数据方式上
public class TestSpEl {
public static Logger logger = Logger.getLogger(TestSpEl.class);
public static void main(String[] args) {
ExpressionParser parser = new SpelExpressionParser();
logger.info("" + parser.parseExpression("'Hello World'").getValue());
logger.info("" + parser.parseExpression("6.0221415E+23").getValue());
logger.info("" + parser.parseExpression("0x7FFFFFFF").getValue());
logger.info("" + parser.parseExpression("true").getValue());
logger.info("" + parser.parseExpression("'00201000331100'").getValue());
logger.info("" + parser.parseExpression("20100033110F").getValue());
logger.info("" + parser.parseExpression("20100033110D").getValue());
logger.info("" + parser.parseExpression("20100033110L").getValue());
logger.info("" + parser.parseExpression("02009920049").getValue());
}
}
对应的执行结果如下:
14:03:59.734 [main] INFO org.galsang.TestSpEl - Hello World
14:03:59.738 [main] INFO org.galsang.TestSpEl - 6.0221415E23
14:03:59.738 [main] INFO org.galsang.TestSpEl - 2147483647
14:03:59.739 [main] INFO org.galsang.TestSpEl - true
14:03:59.739 [main] INFO org.galsang.TestSpEl - 00201000331100
14:03:59.739 [main] INFO org.galsang.TestSpEl - 2.01000325E10
14:03:59.739 [main] INFO org.galsang.TestSpEl - 2.010003311E10
14:03:59.739 [main] INFO org.galsang.TestSpEl - 20100033110
14:03:59.739 [main] INFO org.galsang.TestSpEl - 2009920049
Spring @Value SpEl 知识点小记的更多相关文章
- kubebuilder实战之八:知识点小记
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Spring Security -SpEL表达式
Spring Security -SpEL表达式 开启SpEL表达式 <!-- use-expressions是否开启 SpEL表达式 o.s.s.web.access.expression.W ...
- Sass 主要知识点小记
Sass 主要知识点小记 以前写样式的时候,每个元素的颜色,背景色都需要重新写一遍,然后就想CSS难道没有变量么?最后就查到Sass.但当时没有静下心来好好的看一下,今天正好有时间,就在这里边看边整理 ...
- 回顾maven项目的spring boot相关知识点
2021新年快乐! 在参加完研究生考试后,感觉像是放下了一个大负担,但并不能就此以为什么都结束了.反而,当我今天去看了一下之前老师带领我们班级做的一个maven项目,感觉像是第一次看到这个,十分陌生. ...
- Spring基础—— SpEL
一.SpEL:Spring 表达式语言,在使用的时候类似于 EL 表达式,但是需要注意的是,SpEL 使用在 Spring Config 文件中. 二.格式:使用 #{} 作为界定符,所有在大括号中的 ...
- spring mvc开发过程知识点记录
给一个客户做的一个小项目,需求就是输入类似一个短网址http://dd.yy/xxxx然后跳转到另外一个域名下的图书文件.(实际很多短网址站都提供API供调用吧,不过客户需求是他自己建立一个短网址服务 ...
- Spring之Spel表达式
正常业务场景一般不用这个技术,但需要知道有这么个东西支持Spring. 记忆力不好,抄了些套路代码便于以后用到. package com.paic.phssp.springtest.spel; imp ...
- Spring学习-- SpEL表达式
Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于 EL:SpEL 使用 #{...} 作为定界符 , 所有在大括号中的字符都将被认为是 SpE ...
- Spring系列.SpEL表达式
Spring表达式语言 SpEL语言是一种强大的表达式语言,支持在运行时查询和操作对象.SpEL表达式不一定要创建IOC容器后才能使用.用户完全可以单独调用SpEL的API来独立的使用时SpEL表达式 ...
随机推荐
- Linux下配置redis,c#简单调用
redis比较流行的nosql库: 我这里测试本机window系统,虚拟机安装linux系统,linux系统部署redis,windwo系统,c#调用linux系统的redis 第一步:linux下安 ...
- Protrator 官网和下载工具稍慢 , 但能使用. Angular CLI 内置 官方推荐 TS的 demo 不明显 , 而且依赖无法安装
npm uninstall -g protractor && cnpm install -g protractor && protractor --version 复 ...
- 简说LINUX 下chmod|chown|chgrp和用法和区别
1.chgrp(改变文件所属用户组) chgrp 用户组 文件名 ###就是这个格了.如果整个目录下的都改,则加-R参数用于递归. 如:chgrp -R user smb.con ...
- Mysql+innodb数据存储逻辑
Mysql+innodb数据存储逻辑. 表空间由段,区,页组成 ibdata1:共享表空间.即所有的数据都存放在这个表空间内.如果用户启用了innodb_file_per_table,则每张表内的数据 ...
- 【转】常用算法复习及实现(C++版)
一.霍夫曼树实现 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree).哈夫曼树是带权路径长度最短的树,权值较大 ...
- 【随笔】 Win7下安装Git
Git GGit是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.[2] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源 ...
- 【lua】LWT request请求处理
request请求处理 通过mod_lwt模块提供的处理程序来调用Lua脚本处理HTTP请求.具体流程: 判断该请求是否由LWT处理,如果不是,拒绝处理请求; 判断Lua脚本文件是否存在,如果不存在, ...
- c#随便写写 数据层和表现层,队列执行
base.xxx() 调用父类的方法
- hibernate 学习笔记3
1. 多对多关联: 在双方都要用一个类型为Set的属性保存对方的信息,并在映射配置文件中指定这个属性的名字,并指定中间表.还需要通过<key column=””>来指定自己在中间表中对应的 ...
- Mybatis缓存(一)
1.什么是缓存 Mybatis提供缓存,用于减轻数据压力,提高数据库性能. 2.Mybatis缓存分类 Mybatis的缓存分为一级缓存和二级缓存. Mybatis的一级缓存 1.一级缓存的范围 1 ...