spring中使用@Value设置全局变量默认值
前几天在开发过程中遇到一个使用 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设置全局变量默认值的更多相关文章
- 【BIRT】交叉报表中出现空值设置为默认值
在使用BIRT做交叉报表的时候,往往会出现有些维度下的值是空值,例如如下报表: 那么我们可以为这些空值给出默认值,例如"-" 具体操作如下: 点击上图的[Cross Tab]后选中 ...
- 分别在javascript和JSP中动态设置下拉列表默认值
一.JavaScript中动态设置select标签中<option>选项的默认值: 比如,要完成下边这个下拉列表的动态显示,并且当进行前后翻页时,下拉列表中的值自动更新为当前页码: 图1 ...
- 【全局变量】mysql查看全局变量以及设置全局变量的值
1.查看mysql的所有全局变量的值 SHOW GLOBAL VARIABLES 或者 SHOW VARIABLES mysql有很多全局变量,包括系统的一些基本信息,以及mysql的一些基本配置都可 ...
- 设置select默认值
W3C下设置一个默认值直接为 select.value='默认值'. IE8下设置默认值必须有这个option才能被设置,不像W3C 如chrome这种,直接设置就能显示,如果IE下这样设置的话sel ...
- Mysql 数据库date, datetime类型设置0000-00-00默认值(default)报错问题
Mysql 数据库date, datetime类型设置0000-00-00默认值报错问题 现象:MySQL5.7版本之后,date, datetime类型设置默认值"0000-00-00&q ...
- Spring中bean标签的属性和值:
Spring中bean标签的属性和值: <bean name="user" class="com.pojo.User" init-method=" ...
- Mysql数据表字段设置了默认值,插入数据后默认字段的值却为null,不是默认值
我将mysql的数据表的某个字段设置了默认值为1,当向该表插入数据的时候该字段的值不是默认值,而是null. 我的错误原因: 对数据库的操作我使用了持久化工具mybatis,插入数据的时候插入的是整个 ...
- mysql设置datetime默认值为now
mysql设置datetime默认值为now MYSQL-TIMESTAMP数据类型的默认值与自动更新问题 http://blog.csdn.net/scogeek/article/details/5 ...
- hibernate使用注解设置日期默认值
用注解设置属性的默认值时 使用 @Temporal(TemporalType.TIMESTAMP) @Column(updatable = false,nullable=false,length=20 ...
随机推荐
- [php]HTTP协议头解析
(Request-Line) GET /static/imgs/bqpd.jpg HTTP/1.1 Accept image/png, image/svg+xml, image/*;q=0.8, */ ...
- NYOJ 756 重建二叉树 (二叉树)
题目链接 描述 题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!). 输入 输入有多组数据(少于100组),以文件结尾结束.每组数据仅一行,包括两个字符串,中间用空格隔开 ...
- MSSQL ADO.NET
为什么要学ADO.NET 之前我们所学的只能在查询分析器里查看数据,操作数据,我们让普通用户去学sql,所以我们搭建了一个界面(Web/Winform) 让用户方面的操作数据库中的数据 什么是ADO. ...
- JavaScript三种绑定事件的方式
JavaScript三种绑定事件的方式: 1. <div id="btn" onclick="clickone()"></div> // ...
- webgote的例子(2)Sql注入(SearchGET)
Sql注入(Search/GET) 大家好!!! 现如今web服务在我们的网络上遍地都是,各个终端设备成为我们看不见的客户,web服务也成为公司的招牌.80 443为我们展现的视角也是多姿多彩但背后新 ...
- 超简便安装mysql
CentOS7默认数据库是mariadb,配置等用着不习惯,因此决定改成mysql,但是CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源. 1 ...
- 谷歌PageRank算法
1. 从Google网页排序到PageRank算法 (1)谷歌网页怎么排序? 先对搜索关键词进行分词,如“技术社区”分词为“技术”和“社区”: 根据建立的倒排索引返回同时包含分词后结果的网页: 将返回 ...
- jplayer.js 与 video.js
HTML5 - 两款基于JS的视频播放器 都是基于h5 video 标签,如果不支持则会自动转成flash,这里个人比较推荐使用jplayer; 1.video.js pc端有时候会与视频打交道,如果 ...
- nfs服务器配置
安装 nfs-utils,该软件包提供了 NFS 工具: # yum install nfs-utils 配置启动脚本,使得共享在系统每次启动时都有效: # chkconfig --add rpcbi ...
- python 多线程, 多进程, 协程
1. 介绍: threading用于提供线程相关的操作,线程是应用程序中工作的最小单元.python当前版本的多线程库没有实现优先级.线程组,线程也不能被停止.暂停.恢复.中断. 2. 1 线程执行 ...