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
    
  • 相关阅读:
    Networking with standalone containers
    记filebeat内存泄漏问题分析及调优
    原创-The Salt Master has rejected this minion's public key!解决方法
    原创-某次建表失败-ERROR 1101 (42000): BLOB/TEXT column can’t have a default value
    action命令-判断判断码是否正确
    docker-docker中用户uid异常导致权限不足
    非原创-docker 6种减小镜像大小的方式
    非原创-docker update
    原创-k8s 存活探针,就绪探针与启动探针
    原创-阿里elasticsearch数据迁移
  • 原文地址:https://www.cnblogs.com/vimx86/p/7026630.html
Copyright © 2011-2022 走看看