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


猜你喜欢
- Java集合ArrayDeque类实例分析前言ArrayDeque类是双端队列的实现类,类的继承结构如下面,继承自AbastractColl
- Java 实现 Http Server,模拟前端接口调用前言: 最近看到一个很有意思的东西,手写简单的 Http Server,而且只需要使
- #define只加一个参数 的解释<stdio.h> 里有:#ifndef __STDIO_H #define &n
- 一、什么是特性特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通
- 本文主要和大家分享介绍了关于Java JDK * 使用的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:前言代理是一种常用的
- 一.概述先给大家看一下效果图:点击中间的显示弹框按钮,从底部弹出来一个对话框,用户可以点击拍照或者从相册选择进行相应的操作,下面看看怎么实现
- 本文实例为大家分享了java web上传文件和下载文件的具体代码,供大家参考,具体内容如下 /** * Purpose:上传文档
- 本文实例为大家分享了Android自定义开关的具体代码,供大家参考,具体内容如下以 ToggleColorY 为例分析, ToggleIma
- 本文主要介绍了Maven实战之搭建Maven * 和镜像的方法(图文),分享给大家,具体如下:准备工作安装3.6.*的Nexus理论Nexus
- 动态数据源在很多具体应用场景的时候,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库。又比如
- #region 提示信息#endregion作用:折叠并隐藏代码 ,别且折叠以后能够显示白字“提示信息”如下图就是使用了#region和#e
- 本文实例讲述了Android内容提供者ContentProvider用法。分享给大家供大家参考,具体如下:PersonContentProv
- 关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间。在应用中我们会需要使用redis设置过期时间,比如单点登
- 在我们开发SpringBoot后端服务时,一般需要给前端统一响应格式,方便前端调试及配置错误提示等等。这篇文章讲讲实际工作中统一响应格式及统
- 概述主要用于Java线程里指定时间或周期运行任务。Timer是线程安全的,但不提供实时性(real-time)保证。构造函数Timer()默
- 一、Filter(过滤器)Filter接口定义在javax.servlet包中,是Servlet规范定义的,作用于Request/Respo
- 本文实例讲述了Java创建ZIP压缩文件的方法。分享给大家供大家参考。具体如下:这里注意:建议使用org.apache.tools.zip.
- 问题描述在使用mybatis进行开发的时候,由于可以动态拼接sql,这样大大方便了我们。但是也有一定的问题,当我们动态sql拼接的块很多的时
- 设置项这个版本已经取消了defalut settings指定成默认配置的选项,所以配置都是在settings中配置设置项设置统一UTF-8编
- Toast是一种简易的消息提示框,它无法获取焦点,按设置的时间来显示完以后会自动消失,一般用于帮助或提示。先给大家分享下我的解决思路:不用计