【Spring boot】 @Value注解
一、不通过配置文件的注入属性
1.1 注入普通字符串
直接附在属性名上,在 Bean 初始化时,会赋初始值
@Value("normal")
private String normal;
1.2 注入java系统变量
@Value("#{systemProperties['os.name']}")
private String systemPropertiesName; // 注入操作系统属性
1.3 注入表达式结果
#{ }里面写表 SpEL 达式
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber; //注入表达式结果
1.4 将配置文件 *.properties 或 *. yml 里 配置的 属性 注入
yml配置如下
book:
name: live
@Value("${book.name}")
private String bookName;
1.5 注入文件资源
@Value("classpath:com/hry/spring/configinject/config.txt")
private Resource resourceFile; // 注入文件资源
1.6 注入url资源
@Value("http://www.baidu.com")
private Resource testUrl; // 注入URL资源
二、通过配置文件的注入属性
Springboot通过@Value注解将配置文件中的属性注入到容器内组件中
(可用在@Controller、@Service、@Configuration、@Component等Spring托管的类中)
2.1 普通字符串注入
例:yml中存在key:
name: zs
@Value注入
@Value("${name}")
public String name;
注:当yml中的name没有对应值时,此时,字符串name的值为""
设置注入属性的默认值(当配置文件中没有此key时,此默认值生效),语法:
// 此时,若配置文件中没有name这个key,变量name的值为zch
@Value("${name:zch}")
public String name;
2.2 常用的int、boolean类型
yml 配置文件
port: 8888
flag: true
Java代码
@Value("${port}")
public int port;
@Value("${flag}")
public boolean flag;
2.3 数组类型
yml 配置文件
id: 1,2,3
Java代码
@Value("${id}")
public int[] idArray;
2.4 list类型
示例1
yml 配置文件
id: 1,2,3
Java代码
@Value("#{'${id}'.split(',')}")
public List<String> idList;
注意:当yml中id没有对应值时,集合idList长度为1,存在值"" (原本以为是空集合,造成bug,特记录)
解决办法
在 split() 之前判断下是否为空即可
@Value("#{'${id:}'.empty ? null : '${id:}'.split(',')}")
private List<String> idList;
示例2
test:
ids:
- 1
- 2
- 3
对于 .properties文件配置如下所以:
test.ids[0]=1
test.ids[1]=2
test.ids[2]=3
如果通过@Value注解获取如下所示:
@Value("${test.ids}")
private List<String> ids;
你会发现程序直接报错了,报错信息如下:
java.lang.IllegalArgumentException: Could not resolve placeholder 'test.ids' in value "${test.ids}"
解决办法
新建一个配置类:
@Data
@Configuration
@ConfigurationProperties("test")
public class GetListConfig {
private List<String> ids;
}
通过注入的方式使用,即可;
2.5 map类型
user: "{name: 'zs',age: '23'}" #注意此值用双引号包裹
Java代码
@Value("#{${user}}")
public Map<String,String> userInfo;
注意: 当yml中user没有对应值时,启动报错
【Spring boot】 @Value注解的更多相关文章
- Spring Boot常用注解总结
Spring Boot常用注解总结 @RestController和@RequestMapping注解 @RestController注解,它继承自@Controller注解.4.0之前的版本,Spr ...
- Spring Boot 常用注解汇总
一.启动注解 @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documen ...
- 3个Spring Boot核心注解,你知道几个?
Spring Boot 核心注解讲解 Spring Boot 最大的特点是无需 XML 配置文件,能自动扫描包路径装载并注入对象,并能做到根据 classpath 下的 jar 包自动配置. 所以 S ...
- Spring Boot@Component注解下的类无法@Autowired的问题
title: Spring Boot@Component注解下的类无法@Autowired的问题 date: 2019-06-26 08:30:03 categories: Spring Boot t ...
- Spring boot 基于注解方式配置datasource
Spring boot 基于注解方式配置datasource 编辑 Xml配置 我们先来回顾下,使用xml配置数据源. 步骤: 先加载数据库相关配置文件; 配置数据源; 配置sqlSessionF ...
- 【SpringBoot】15. Spring Boot核心注解
Spring Boot核心注解 1 @SpringBootApplication 代表是Spring Boot启动的类 2 @SpringBootConfiguration 通过bean对象来获取配置 ...
- spring boot纯注解开发模板
简介 spring boot纯注解开发模板 创建项目 pom.xml导入所需依赖 点击查看源码 <dependencies> <dependency> <groupId& ...
- Spring Boot中注解@ConfigurationProperties
在Spring Boot中注解@ConfigurationProperties有三种使用场景,而通常情况下我们使用的最多的只是其中的一种场景.本篇文章带大家了解一下三种场景的使用情况. 场景一 使用@ ...
- Spring Boot MyBatis注解:@MapperScan和@Mapper
最近参与公司的新项目架构搭建,在使用mybatis的注解时,和同时有了不同意见,同事认为使用@Mapper注解简单明了,而我建议使用@MapperScan,直接将mapper所在的目录扫描进去就行,而 ...
- spring boot常用注解小计
@Async 需要执行异步方法时,在方法上加上@Async之后,底层使用多线程技术 .启动类上需要加上 @EnableAsync 注意:异步执行方法,不能与引用方法同在一个类里 @Transactio ...
随机推荐
- Python程序笔记20230301
打印九九乘法表 for i in range(1, 10): for j in range(1, i+1): print(i, "x", j, "=", i * ...
- CSS实现单行或者多行文本溢出隐藏并且显示省略号
一.单行超出显示省略号如果文字超出父元素指定宽度,文字会自动换行,而连续不间断数字和英文字母(没有其他字符)不会自动换行: 详细步骤: 第一步(不换行):white-space:nowrop;(对于连 ...
- DRF的限流组件(源码分析)
DRF限流组件(源码分析) 限流,限制用户访问频率,例如:用户1分钟最多访问100次 或者 短信验证码一天每天可以发送50次, 防止盗刷. 对于匿名用户,使用用户IP作为唯一标识. 对于登录用户,使用 ...
- 尝试CentOS8---部署集群(生产环境7.9为好)
一.LVS集群简介 什么是集群 通过网络将很多服务器集中起来,提供同一种服务,在客户端看来就像是只有一个服务器 二.LVS-NAT集群 1.环境准备 启动3台虚拟机,禁用selinux和firewal ...
- flink之Sink to MySQL和Redis
前言 下面这篇文章是使用Flink的Sink 写出数据到Redis和MySQL Flink之Sink写入Redis和MySQL Flink需要添加Sink的时候,需要自己去添加写Sink,我们可以实现 ...
- 2022-01-16:小明手中有n块积木,并且小明知道每块积木的重量。现在小明希望将这些积木堆起来, 要求是任意一块积木如果想堆在另一块积木上面,那么要求: 1.上面的积木重量不能小于下面的积木重量;
2022-01-16:小明手中有n块积木,并且小明知道每块积木的重量.现在小明希望将这些积木堆起来, 要求是任意一块积木如果想堆在另一块积木上面,那么要求: 1.上面的积木重量不能小于下面的积木重量: ...
- 2021-12-01:给定一个正数数组arr,代表每个人的体重。给定一个正数limit代表船的载重,所有船都是同样的载重量。 每个人的体重都一定不大于船的载重。 要求: 1, 可以1个人单独一搜船;
2021-12-01:给定一个正数数组arr,代表每个人的体重.给定一个正数limit代表船的载重,所有船都是同样的载重量. 每个人的体重都一定不大于船的载重. 要求: 1, 可以1个人单独一搜船: ...
- 2021-08-11:按要求补齐数组。给定一个已排序的正整数数组 nums,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用
2021-08-11:按要求补齐数组.给定一个已排序的正整数数组 nums,和一个正整数 n .从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 ...
- 修改本地hosts
本地hosts文件地址 C:\Windows\System32\drivers\etc 修改前 修改后 可以使用记事本打开hosts文件或使用Notepad++ 工具打开 按图示添加,修改即可
- Net 如何获取私有属性
.Net的私有属性.成员变量.方法,都可以通过反射获取调用,当然正常我们不会这么操作 此章只是做一个反射科普,像EFCore从数据库取值的底层框架就是通过反射直接操作私有的成员变量,而不是方法. 直接 ...