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
    
  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/vimx86/p/7026630.html
Copyright © 2011-2022 走看看