前几天在开发过程中遇到一个使用 spring 的 @Value 给类的全局变量设置默认值不成功的问题,最后通过查资料也是轻松解决,但是发现使用@Value也是有多种多样的方式,今天总算是将开发任务结束,于是打算回过头来再去研究研究这个问题。

一、首先展示两种我这边的错误写法。让大家引以为戒。

  1. 在给类的全局静态变量设置默认值时,@Value 不能直接写在变量上方。

  

  2.将 @Value 加到set方法上时,不能使用 static 修饰

  3.使用 @Value 时不能用#代替$

  以上几种错误就是我在开发过程中出现的一些比较容易出现的错误,下面就是我在查询资料时学习到@Value的一些使用方法。

二、配置 .properties 文件

  使用 @Value 我们一般会将一些经常容易修改,但是在程序中不变的变量配置到配置文件中,一般是 .properties 文件,下面是三种不同的方式去将  .properties 文件引入到项目中。

  1. 在spring 的配置文件中使用 <context:property-placeholder/> 标签,其中 loaction 为配置文件路径 file-encoding 为配置编码格式

  2. 在spring 的配置文件中配置bean

  3. 第三种则是使用 @PropertySource 注解将配置文件加载到某一个类中

三、@Value 注解的使用

  1. 非静态变量使用 @Value

    ①. 将@Value 加在变量上

    ②. 将@Value 加在 set 方法上

  2. 静态变量使用 @Value

    静态变量在使用 @Value时,只能加在 set 方法上面,并且set方法不能是静态方法

 四、# 符与 $ 符的区别

  1. @Value("#{}")

    ①. 直接给变量赋值

    ②. 对赋值的字符串进行一些操作

    ③. 如果 .properties 是以bean的方式注入的,则可以使用bean的id去获取属性

    ④. 上面的情况还可以这么写

    ⑤. 表达式

   2. @Value("${}")

    ①. 获取普通配置文件中的属性

    ②. 如果配置文件中没有获取到属性值则使用默认值

  3. 其他无符号用途

    ①. 文件资源

    ②. 网站资源

 五、在引入 .properties 文件时出现的 编码问题

  在上面学习开始时我还遇到使用 @Value 注解设置默认值为中文时出现的乱码问题,我在网上百度出来好多博客几乎大同小异都是下面两种解决方案,以及修改 IDE 的编码格式等等:

  1.修改注解

   2. 修改配置文件

  但是,在我实践的过程中发现,这两种方式都不能生效,不知道是因为我在什么地方没有添加什么配置还是什么原因,如果有知道的小伙伴可以给我留言。我在测试时发现 .properties 文件在读取时,无论 IDE 将文件设置为什么格式,都会将内容转换为 ISO-8859-1 的编码。于是我在获取到默认值之后再将之转换为 UTF-8.

  还有一种方式就是在.properties  文件中写中文时直接转换成Unicode 编码,使用 @Value 时就不用做其他转码操作。

  

-------------------- END ---------------------

最后附上作者的微信公众号地址和博客地址

公众号:wuyouxin_gzh

Herrt灬凌夜:https://www.cnblogs.com/wuyx/

版权说明:欢迎以任何方式进行转载,但请在转载后注明出处!

spring中使用@Value设置全局变量默认值的更多相关文章

  1. 【BIRT】交叉报表中出现空值设置为默认值

    在使用BIRT做交叉报表的时候,往往会出现有些维度下的值是空值,例如如下报表: 那么我们可以为这些空值给出默认值,例如"-" 具体操作如下: 点击上图的[Cross Tab]后选中 ...

  2. 分别在javascript和JSP中动态设置下拉列表默认值

    一.JavaScript中动态设置select标签中<option>选项的默认值: 比如,要完成下边这个下拉列表的动态显示,并且当进行前后翻页时,下拉列表中的值自动更新为当前页码: 图1 ...

  3. 【全局变量】mysql查看全局变量以及设置全局变量的值

    1.查看mysql的所有全局变量的值 SHOW GLOBAL VARIABLES 或者 SHOW VARIABLES mysql有很多全局变量,包括系统的一些基本信息,以及mysql的一些基本配置都可 ...

  4. 设置select默认值

    W3C下设置一个默认值直接为 select.value='默认值'. IE8下设置默认值必须有这个option才能被设置,不像W3C 如chrome这种,直接设置就能显示,如果IE下这样设置的话sel ...

  5. Mysql 数据库date, datetime类型设置0000-00-00默认值(default)报错问题

    Mysql 数据库date, datetime类型设置0000-00-00默认值报错问题 现象:MySQL5.7版本之后,date, datetime类型设置默认值"0000-00-00&q ...

  6. Spring中bean标签的属性和值:

    Spring中bean标签的属性和值: <bean name="user" class="com.pojo.User" init-method=" ...

  7. Mysql数据表字段设置了默认值,插入数据后默认字段的值却为null,不是默认值

    我将mysql的数据表的某个字段设置了默认值为1,当向该表插入数据的时候该字段的值不是默认值,而是null. 我的错误原因: 对数据库的操作我使用了持久化工具mybatis,插入数据的时候插入的是整个 ...

  8. mysql设置datetime默认值为now

    mysql设置datetime默认值为now MYSQL-TIMESTAMP数据类型的默认值与自动更新问题 http://blog.csdn.net/scogeek/article/details/5 ...

  9. hibernate使用注解设置日期默认值

    用注解设置属性的默认值时 使用 @Temporal(TemporalType.TIMESTAMP) @Column(updatable = false,nullable=false,length=20 ...

随机推荐

  1. 【BZOJ】2301: [HAOI2011]Problem b

    [题意]于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数.n,a,b,c,d,k<=50000. ...

  2. Gmail登录(2017.10)

    本文地址:http://www.cnblogs.com/veinyin/p/7646382.html  由于众所周知的原因,我们使用 Gmail 查看邮件时会有些麻烦,有时梯子不够用甚至不能查看. 比 ...

  3. centos6.5 导入matplotlib报错 No module named '_tkinter

    1.解决方案 在centos系统下,导入matplotlib时,出现ImportError: No module named ‘_tkinter’的错误,首先 yum list installed | ...

  4. D - Binary Lexicographic Sequence URAL - 1081 (贪心)

    题目链接:https://cn.vjudge.net/contest/275079#problem/D 具体思路:首先,我们可以观察到1-n位数的种数连起来是一个很有规律的数列,然后我们开始倒序建立. ...

  5. Linux是对用户的密码的复杂度要求设置【转】

    那么Linux是如何实现对用户的密码的复杂度的检查的呢?其实系统对密码的控制是有两部分组成: 1 cracklib 2 /etc/login.defs pam_cracklib.so 才是控制密码复杂 ...

  6. 516.Longest Palindromic subsequence---dp

    题目链接:https://leetcode.com/problems/longest-palindromic-subsequence/description/ 题目大意:找出最长回文子序列(不连续), ...

  7. Deep Learning基础--Softmax求导过程

    一.softmax函数 softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类! 假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个 ...

  8. Firefox缓存文件夹位置设置及清除缓存方法

    地址栏敲入: about:config, 新建一个"browser.cache.disk.parent_directory", 并设置为你要的缓存文件夹, 例如:  "F ...

  9. 多播知识by 陈胜君

    简单的讲一下多拨的说明:一.多拨分物理多拨和虚拟多拨. 物理多拨是电信老套餐,就是一个宽带支持四个内网设备同时拨号上网,即2004年以前,允许家里四台电脑直接连LAN网口启动拨号,同时允许四拨在线.现 ...

  10. angular项目中使用jquery的问题

    1.使用npm命令往项目中添加jQuery. npm install jquery --save 2.在你想要用jQuery的组件中添加. import * as $ from "jquer ...