【Spring】只想用一篇文章记录@Value的使用,不想再找其它了(附思维导图)
1 简介
不得不说,Spring为大家提供许多开箱即用的功能,@Value就是一个极其常用的功能,它能将配置信息注入到bean中去。即使是一个简单的功能,Spring也提供了丰富的注入类型和形式。我经常会忘记一些特别类型注入的写法,比如说数组,现在整理一下,希望以后不用再找了。

2 三种形式
使用@Value注入有三种形式,如下所示:
(1)直接写值@Value("string value")
这种方式就是直接把要注入的值字面量写在注解里,比较少用。如果要写死在注解里了,那直接定义变量的时候写死就可以了。
(2)占位符@Value("${myvalue}")
这种应该最常用,通过属性名,将值注入进来。
如果可能为空,需要设置默认值,用法:@Value("${unknown.param:defaultValue}")
(3)SpEL表达式@Value("#{someBean.someValue}")
SpEL表达式很强大,还能在属性值基础上加以运算等。
如果可能为空,需要设置默认值,用法:@Value("#{systemProperties['unknown'] ?: 'defaultValue'}")
另外,占位符形式和SpEL表达式是可以结合使用的,如下:
@Value("#{'${listOfValues}'.split(',')}")
private List valuesList;
需要注意的,内外顺序不能倒过来,应该要#{}外面,${}在里面。
3 使用场景
对于注入的场景,主要有三种:
(1)bean声明的变量
(2)setter方法注入
(3)构造方法或其它方法的入参
例子代码如下:
//bean声明的变量
public static class MyValues {
@Value("#{systemProperties['user.timezone']}")
private String timeZone;
}
//setter 方法中
public static class MyValues {
private String timeZone;
@Value("#{systemProperties['user.timezone']}")
public void setTimeZone(String timeZone) {
this.timeZone = timeZone;
}
}
//方法入参
public class MyValues {
private String timeZone;
@Autowired
public void configure(@Value("#{systemProperties['user.timezone']}") String timeZone) {
this.timeZone = timeZone;
}
}
4 引入配置文件
既然是注入配置属性,那就需要有配置文件。对于Springboot,引入配置文件有两种方法,一种是默认引入的application.properties,另一种则需要通过@PropertySource来引入,引入的方式如下:
@PropertySources({
@PropertySource(value = "classpath:missing.properties", ignoreResourceNotFound=true),
@PropertySource("classpath:config.properties")
})
public class AppConfig {
//...
}
加上ignoreResourceNotFound后,即使文件找不到,也不会抛FileNotFoundException异常。
5 使用举例
现在例举一些可能使用到的例子,以后在这找就行了。
Java代码如下所示:
//直接写值
@Value("plainText")
private String plainText;
//普通形式-字符串
@Value("${myValues.string}")
private String myValuesString;
//普通形式-数字
@Value("${myValues.int}")
private int myValuesInt;
//普通形式-布尔类型
@Value("${myValues.boolean}")
private boolean myValuesBoolean;
//数组
@Value("${myValues.array}")
private String[] myValuesArray;
//Map
@Value("#{${myValues.map}}")
private Map<String, String> myValuesMap;
//操作系统属性
@Value("#{systemProperties['user.timezone']}")
private String timeZone;
//表达式结果
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber;
//其它bean的属性
@Value("#{propertiesApplication.class.getName()}")
private String className;
//文件资源
@Value("classpath:larry.txt")
private Resource file;
//URL资源
@Value("https://www.github.com")
private Resource url;
其中,配置文件application.properties内容为:
myValues.int=99
myValues.boolean=true
myValues.string=Larry
myValues.array=my,name,is,larry
myValues.map={name: 'Larry', age: '18', city: 'Guangzhou'}
资源文件larry.txt内容为:
上善若水,水利万物而不争!
启动程序,打印以上所有属性,输出结果如下所示:
{
plainText='plainText',
myValuesString='Larry',
myValuesInt=99,
myValuesBoolean=true,
myValuesArray=[my, name, is, larry],
myValuesMap={name=Larry, age=18, city=Guangzhou},
timeZone='Asia/Shanghai',
randomNumber=19.775129662772294,
className='com.pkslow.properties.PropertiesApplication$$EnhancerBySpringCGLIB$$4d0912c',
file=上善若水,水利万物而不争!,
url=
<!DOCTYPE html>
<html lang="en">
省略html内容
</html>
}
6 总结
本文讲解了@Value注解的使用,基本上平时开发用到的都涉及了,应该不需要再找其它资料了吧。
欢迎关注公众号<南瓜慢说>,将持续为你更新...

欢迎加博主微信,做一个点赞之友,哈哈...

多读书,多分享;多写作,多整理。
【Spring】只想用一篇文章记录@Value的使用,不想再找其它了(附思维导图)的更多相关文章
- 一篇文章一张思维导图看懂Android学习最佳路线
一篇文章一张思维导图看懂Android学习最佳路线 先上一张android开发知识点学习路线图思维导图 Android学习路线从4个阶段来对Android的学习过程做一个全面的分析:Android初级 ...
- Spring思维导图,让spring不再难懂(一)
写在前面 很多人在微信公众号中给我留言说想看spring的思维导图,正好也打算写.与其他框架相比,spring项目拥有更多的模块,我们常用的ioc,mvc,aop等,这些是spring的主要板块.一篇 ...
- JS高程读书笔记-第一、二章-内附在线思维导图和quizlet卡片
之前在kindle上买了高程,今天又到了纸质的<JavaScript语言精粹>,<高性能JavaScript>,<JavaScipt设计模式>,开始读书之旅啦. 我 ...
- C++第三章复习与总结(思维导图分享)
在完成了第三章的学习后,为了便于日后的复习整理,我制作了一张思维导图,有需要的可以自取. 函数的定义与使用 带默认值的函数 在C++中我们可以为函数添加默认的参数值,在调用时可不传入或部分传入参数,为 ...
- 曹工说Spring Boot源码系列开讲了(1)-- Bean Definition到底是什么,附spring思维导图分享
写在前面的话&&About me 网上写spring的文章多如牛毛,为什么还要写呢,因为,很简单,那是人家写的:网上都鼓励你不要造轮子,为什么你还要造呢,因为,那不是你造的. 我不是要 ...
- Spring思维导图(MVC篇)
写在前面 生活就像海洋,只有意志坚强的人才能到达彼岸. 已经很久没有发文章了呀,想必大家都挂念我了,哈哈. 温故而知新,今天一起来复习一下spring mvc的内容吧. spring mvc简介与运行 ...
- Spring思维导图(AOP篇)
什么是aop AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP允许 ...
- Spring思维导图(一)
关于Spring Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架 ...
- C++第二章复习与总结(思维导图分享)
在完成了第二章的学习后,为了便于日后的复习整理,我制作了一张思维导图,有需要的可以自取. 基本数据类型 基础类型在cppreference网站上有非常完备的介绍,我一句话两句话也说不清,具体网址我会给 ...
随机推荐
- 阿里云ECS搭建harbor1.6.1仓库
机器信息 Centos 7.4 安装docker yum install docker #启动docker并设置开机自启 systemctl start docker systemctl enable ...
- Res2net:多尺度骨干网络结构
<Res2Net: A New Multi-scale Backbone Architecture> 来自:南开大学程明明组 论文:https://arxiv.org/abs/1904.0 ...
- github下载历史版本--xdd
第一步 打开一个仓库,可以看到此时在主分支下,点击1位置查看历史版本 第二步 现在可以查看到所有的版本(提交)信息,单击2位置进入该版本 第三步 单击3位置浏览并打开该版本 第四步 进入该版本之后,可 ...
- 基于xtrabackup实现mysql备份还原
简介 Xtrabackup2.2版之前包括4个可执行文件: innobackupex: Perl 脚本 xtrabackup: C/C++ 编译的二进制 xbstream: 支持并发写的流文件格式 x ...
- 基于 HTML5 WebGL + VR 的 3D 机房数据中心可视化
前言 在 3D 机房数据中心可视化应用中,随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的 ...
- mac 安装zmap
mac安装zmap有两种方式 1.命令行安装 brew install zmap export PATH=$PATH:/usr/local/sbin 很多人安装的时候只有第一步,然后直接bash:zm ...
- sed和awk的简单使用
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以 行 为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法. 语法: sed [-nefri] ‘ ...
- Spring Data Jpa的四种查询方式
一.调用接口的方式 1.基本介绍 通过调用接口里的方法查询,需要我们自定义的接口继承Spring Data Jpa规定的接口 public interface UserDao extends JpaR ...
- vim介绍、颜色显示和移动光标、一般模式下移动光标及复制、剪切和粘贴
第4周第4次课(4月12日) 课程内容: 5.1 vim介绍5.2 vim颜色显示和移动光标5.3 vim一般模式下移动光标5.4 vim一般模式下复制.剪切和粘贴 5.1 vim介绍 centos7 ...
- 使用IDEA开发Spring入门程序
使用IDEA开发Spring入门程序 前言 本文通过一个简单的入门程序向读者演示Spring框架的使用过程,具体如下: 一.使用IDEA创建Maven应用项目并导入相应模块 使用IDEA创建一个名为n ...