• 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
    
  • 相关阅读:
    Docker安装
    Shell编程
    Java:字节流和字符流(输入流和输出流)
    spring中的组合模式
    MySQL:ALTER COLUMN、MODIFY COLUMN 和 CHANGE COLUMN
    springboot项目打包docker镜像maven插件
    OGNL表达式
    项目中redisTemplate设置的key,redis客户端上查询不到的问题
    spring-session-data-redis反序列化问题
    深入理解SPI机制
  • 原文地址:https://www.cnblogs.com/vimx86/p/7026630.html
Copyright © 2020-2023  润新知