SpringBoot超详细讲解@Value注解
作者:蹲街式等待 时间:2022-03-06 12:05:36
一、非配置文件注入
1、注入普通字符串
直接附在属性名上,在 Bean 初始化时,会赋初始值。
@Value("admin")
private String name;
2、注入JAVA系统变量
@Value("#{systemProperties['os.name']}")
private String osName;
这里的 osName
是 JAVA 的 System.getProperties()
方法获取的JAVA环境变量 ,查看java系统变量的方法如下:
public String getproperties() {
//获取所有的属性
Properties properties = System.getProperties();
//为了看看系统的属性有几个,加了一个计数器
//遍历所有的属性
for (String key : properties.stringPropertyNames()) {
System.out.println(key + "=" + properties.getProperty(key));
}
return null;
}
3、注入表达式
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber;
注:#{}
中写表达式。
4、注入其他Bean属性
注入 beanInject
对象的属性 another
。
@Value("#{beanInject.another}")
private String fromAnotherBean;
5、注入文件资源
@Value("classpath:com/hry/spring/configinject/config.txt")
private Resource resourceFile;
6、注入URL资源
@Value("http://www.baidu.com")
private Resource testUrl;
二、通过配置文件注入
SpringBoot
通过 @Value
注解将配置文件中的属性注入到容器内组件中(可用在 @Controller
、@Service
、@Configuration
、@Component
等Spring托管的类中)
1、注入普通字符串
在 application.properties
配置文件中有如下配置:
name=admin
@Value
注入属性:
@Value("${name}")
public String name;
此时,name
的值为 admin
。
当配置文件中 name=
空时,此时name属性的值为 ""
。
我们可以为注入属性设置默认值:
@Value("${name:admin}")
public String name;
2、注入基本类型
在 application.properties
配置文件中有如下配置:
port=8888
open=true
score=90.1
@Value
注入属性:
@Value("${port:1111}")
private int port;
@Value("${open:true}")
private boolean open;
@Value("${score:100}")
private double score;
3、注入数组类型
在 application.properties
配置文件中有如下配置:
ids=1,2,3
@Value
注入属性:
@Value("${ids}")
public int[] arrIds;
注:当配置文件中 ids
没有对应值时,数组 arrIds
为 非null空数组
,长度为 0
。
4、注入List类型
在 application.properties
配置文件中有如下配置:
ids=1,2,3
@Value
注入属性:
@Value("#{'${ids}'.split(',')}")
public List<String> listIds;
注:当配置文件中 ids
没有对应值时,集合 listIds
长度为 1
,存在值为:""
。
5、注入Map类型
在 application.properties
配置文件中有如下配置:
user="{name:'admin', age:'23'}"
@Value
注入属性:
@Value("#{${user}}")
public Map<String, String> userMap;
#{}
表示使用 SpEL表达式
。
注:当配置文件中 user
没有对应值是,启动报错。
来源:https://blog.csdn.net/wangzhongshun/article/details/125814804
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
解决Mybatis-Plus操作分页后数据失效问题
Java面向对象编程的三大特征
![](https://img.aspxhome.com/file/2023/8/58478_0s.png)
Java实现调用外部程序的示例代码
![](https://img.aspxhome.com/file/2023/2/59212_0s.png)
Java 二分查找的实现及图例解析
![](https://img.aspxhome.com/file/2023/9/58699_0s.png)
mybatis使用foreach查询不出结果也不报错的问题
![](https://img.aspxhome.com/file/2023/6/60116_0s.png)
阿里开源Java诊断工具神器使用及场景详解
java selenium使用浏览器调试工具实现方法
![](https://img.aspxhome.com/file/2023/7/57897_0s.gif)
mybatis-plus中lambdaQuery()与lambdaUpdate()比较常见的使用方法总结
![](https://img.aspxhome.com/file/2023/6/60156_0s.jpg)
Java面试题冲刺第五天--基础篇2
![](https://img.aspxhome.com/file/2023/7/58617_0s.png)
elasticsearch分布式及数据的功能源码分析
![](https://img.aspxhome.com/file/2023/7/58087_0s.png)
Mybatis配置之typeAlias标签的用法
![](https://img.aspxhome.com/file/2023/6/60446_0s.jpg)
Maven的安装配置详解
![](https://img.aspxhome.com/file/2023/3/59323_0s.png)
C# BitArray(点矩阵)转换成int和string的方法实现
![](https://img.aspxhome.com/file/2023/0/66110_0s.png)
微信小程序获取手机号,后端JAVA解密流程代码
java模拟TCP通信实现客户端上传文件到服务器端
基于Java语言MD5加密Base64转换方法
Android实现腾讯新闻的新闻类别导航效果
![](https://img.aspxhome.com/file/2023/3/85973_0s.png)
java实现马踏棋盘的算法
![](https://img.aspxhome.com/file/2023/4/60284_0s.jpg)
Java Spring5学习之JdbcTemplate详解
![](https://img.aspxhome.com/file/2023/2/60412_0s.png)
Java如何给Word文档添加多行文字水印
![](https://img.aspxhome.com/file/2023/2/58922_0s.png)