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 ...
随机推荐
- JAVA多线程提高十一:同步工具Exchanger
Exchanger可以在对中对元素进行配对和交换的线程的同步点.每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象.Exchanger 可能被视 ...
- 【问题解决】访问jhipster-registry-master出现空白页
问题概述: 刚从github拉下来的jhipster-registry-master直接运行,访问http://localhost:8761会发现会空白页,但是网页的title显示正常,本文目的是解决 ...
- 【洛谷 P3227】 [HNOI2013]切糕(最小割)
题目链接 每层每个位置向下一层这个位置连边,流量为下一层这个位置的\(f\),源点向第一层连,流量第一层每个位置的费用,最后一层向汇点连,流量\(INF\). 这样就得到了\(P*Q\)条链,不考虑\ ...
- 【leetcode 简单】第十一题 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6], 5 输 ...
- flex实例(阮一峰)
Flex 布局教程:实例篇 作者: 阮一峰 日期: 2015年7月14日 上一篇文章介绍了Flex布局的语法,今天介绍常见布局的Flex写法. 你会看到,不管是什么布局,Flex往往都可以几行命令 ...
- 1030 大数进制转换(51Nod + JAVA)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1030 题目: 代码实现如下: import java.mat ...
- JSON.parse()——json字符串转JS
JSON 通常用于与服务端交换数据. 在接收服务器数据时一般是字符串. 我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象. 语法 JSON.parse(text[, ...
- Android的休眠与唤醒
Android 休眠(suspend),在一个打过android补丁的内核中,state_store()函数会走另外一条路,会进入到request_suspend_state()中,这个文件在earl ...
- Deep Learning基础--各个损失函数的总结与比较
损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好.损失函数是经验 ...
- 【bzoj4293】【PA2015】Siano
如题,首先可以考虑相对大小是不变的. 那么先sort,之后每次在线段树上二分即可. #include<bits/stdc++.h> typedef long long ll; using ...