zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    jquery中简易tab切换
    网页中用哪种空链接
    php中each()与list()函数
    转:const“变量”、define的常量和static 变量
    php错误收集
    php基础小知识
    初学深度学习(TensorFlow框架的心得and经验总结)自用环境的总结
    Python扩展模块——调用WindowsAPI(pywin32的简单使用)
    Python扩展模块——selenium的使用(定位、下载文件等)
    Python扩展模块——自动化(testlinkAPI的使用)
  • 原文地址:https://www.cnblogs.com/vimx86/p/7026630.html
Copyright © 2011-2022 走看看