zoukankan      html  css  js  c++  java
  • spring之@value详解二(转载)

    1.1 前提

    测试属性文件:advance_value_inject.properties

    server.name=server1,server2,server3
    #spelDefault.value=notdefault
    HelloWorld_=sss

    测试类AdvanceValueInject:引入advance_value_inject.properties文件,作为属性的注入

    @Component
    @PropertySource({"classpath:com/hry/spring/configinject/advance_value_inject.properties"})
    public class AdvanceValueInject {
    ...
    }

    1.2 #{…}和${…}

    ${…}用法 
    {}里面的内容必须符合SpEL表达式,详细的语法,以后可以专门开新的文章介绍, 通过@Value(“${spelDefault.value}”)可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如@Value("${spelDefault.value:127.0.0.1}")

    详细代码如下:

    // 如果属性文件没有spelDefault.value,则会报错
        //  @Value("${spelDefault.value}")
        //  private String spelDefault2;
    
        // 使用default.value设置值,如果不存在则使用默认值
        @Value("${spelDefault.value:127.0.0.1}")
        private String spelDefault;

    #{…}用法 

    这里只演示简单用法:

     // SpEL:调用字符串Hello World的concat方法
        @Value("#{'Hello World'.concat('!')}")
        private String helloWorld;
    
        // SpEL: 调用字符串的getBytes方法,然后调用length属性
        @Value("#{'Hello World'.bytes.length}")
        private String helloWorldbytes;

    ${…}和#{…}混合使用 
    ${...}和#{...}可以混合使用,如下文代码执行顺序:通过${server.name}从属性文件中获取值并进行替换,然后就变成了 执行SpEL表达式{‘server1,server2,server3’.split(‘,’)}。

    // SpEL: 传入一个字符串,根据","切分后插入列表中, #{}和${}配置使用(注意单引号,注意不能反过来${}在外面,#{}在里面)
        @Value("#{'${server.name}'.split(',')}")
        private List<String> servers;

    在上文中在#{}外面,${}在里面可以执行成功,那么反过来是否可以呢${}在外面,#{}在里面,如代码

    // SpEL: 注意不能反过来${}在外面,#{}在里面,这个会执行失败
        @Value("${#{'HelloWorld'.concat('_')}}")
        private List<String> servers2;

    答案是不能。因为spring执行${}是时机要早于#{}。在本例中,Spring会尝试从属性中查找#{‘HelloWorld’.concat(‘_’)},那么肯定找到,由上文已知如果找不到,然后报错。所以${}在外面,#{}在里面是非法操作

    小结

    • #{…} 用于执行SpEl表达式,并将内容赋值给属性
    • ${…} 主要用于加载外部属性文件中的值
    • #{…} 和${…} 可以混合使用,但是必须#{}外面,${}在里面

    转自:https://blog.csdn.net/hry2015/article/details/72453920

  • 相关阅读:
    虚函数******
    C++ 中的运算符重载********
    继承
    静态成员和成员函数
    类指针
    内联函数
    k8基础架构
    cobbler自动装机
    ens33-eth0
    PXE-自动装机配置
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/9014884.html
Copyright © 2011-2022 走看看