一、不通过配置文件的注入属性

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注解的更多相关文章

  1. Spring Boot常用注解总结

    Spring Boot常用注解总结 @RestController和@RequestMapping注解 @RestController注解,它继承自@Controller注解.4.0之前的版本,Spr ...

  2. Spring Boot 常用注解汇总

    一.启动注解 @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documen ...

  3. 3个Spring Boot核心注解,你知道几个?

    Spring Boot 核心注解讲解 Spring Boot 最大的特点是无需 XML 配置文件,能自动扫描包路径装载并注入对象,并能做到根据 classpath 下的 jar 包自动配置. 所以 S ...

  4. Spring Boot@Component注解下的类无法@Autowired的问题

    title: Spring Boot@Component注解下的类无法@Autowired的问题 date: 2019-06-26 08:30:03 categories: Spring Boot t ...

  5. Spring boot 基于注解方式配置datasource

    Spring boot 基于注解方式配置datasource 编辑 ​ Xml配置 我们先来回顾下,使用xml配置数据源. 步骤: 先加载数据库相关配置文件; 配置数据源; 配置sqlSessionF ...

  6. 【SpringBoot】15. Spring Boot核心注解

    Spring Boot核心注解 1 @SpringBootApplication 代表是Spring Boot启动的类 2 @SpringBootConfiguration 通过bean对象来获取配置 ...

  7. spring boot纯注解开发模板

    简介 spring boot纯注解开发模板 创建项目 pom.xml导入所需依赖 点击查看源码 <dependencies> <dependency> <groupId& ...

  8. Spring Boot中注解@ConfigurationProperties

    在Spring Boot中注解@ConfigurationProperties有三种使用场景,而通常情况下我们使用的最多的只是其中的一种场景.本篇文章带大家了解一下三种场景的使用情况. 场景一 使用@ ...

  9. Spring Boot MyBatis注解:@MapperScan和@Mapper

    最近参与公司的新项目架构搭建,在使用mybatis的注解时,和同时有了不同意见,同事认为使用@Mapper注解简单明了,而我建议使用@MapperScan,直接将mapper所在的目录扫描进去就行,而 ...

  10. spring boot常用注解小计

    @Async 需要执行异步方法时,在方法上加上@Async之后,底层使用多线程技术 .启动类上需要加上 @EnableAsync 注意:异步执行方法,不能与引用方法同在一个类里 @Transactio ...

随机推荐

  1. 数据泵:impdp导入用户ORA-01653

    ,问题描述:在导入一个用户数据的时候,大小为14G左右,导进来的时候卡半天,后来发现是表空间满了,已经恢复了大概6G左右,剩下8G左右没有恢复.此时磁盘剩余19G,加了15G的表空间,磁盘就剩下4G左 ...

  2. scikit-learn 中 Boston Housing 数据集问题解决方案

    scikit-learn 中 Boston Housing 数据集问题解决方案 在部分旧教程或教材中是 sklearn,现在[2023]已经变更为 scikit-learn 作用:开源机器学习库,支持 ...

  3. 【Java Se】JDBC

    启停服务 net start mysql net stop mysql 登录 mysql -u -p 访问指定IP的mysql mysql -u root -P 3306 -h localhost - ...

  4. Dotnet初探: 尝试使用 dotnet6 的miniapi

    引子 最近我们学校要求我们使用dotnet实现一个登录功能,由于我们学校的教程老旧(万年经典asp .net 4.x,慢的要死),我看有高性能又免费的Dotnet6不用,还又要退回几年前,于是决定另开 ...

  5. UniApp小程序开发如何获取用户手机号

    我们在小程序开发的时候经常遇到这种需求,需要在账号登陆的时候进行手机号获取,并使用手机号登陆. 本文讲述如何在前后端分离的状态下获取手机号 查阅官网文档不难发现我们需要使用uni.login()这个方 ...

  6. Burnside 引理及其扩展

    之前学 Burnside 一直没能深入本质,这回与 QYB 学弟讨论了一下 Burnside 引理的证明,做一个记录. 前置知识:群的定义. 一.等价染色方案计数问题 对于一种染色方案组成的集合 \( ...

  7. 【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题

    问题描述 在中国区Azure上,使用Media Service服务,想要使用.NET的代码来对上传视频创建缩略图(Thumbnail) . 通过官网文档(https://docs.azure.cn/z ...

  8. 2021-07-29:最大路径和。给定一个矩阵matrix,先从左上角开始,每一步只能往右或者往下走,走到右下角。然后从右下角出发,每一步只能往上或者往左走,再回到左上角。任何一个位置的数字,只能获得

    2021-07-29:最大路径和.给定一个矩阵matrix,先从左上角开始,每一步只能往右或者往下走,走到右下角.然后从右下角出发,每一步只能往上或者往左走,再回到左上角.任何一个位置的数字,只能获得 ...

  9. 2021-11-06:3的幂。给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。整数 n 是 3 的幂次方需满足:存在整数 x 使得 n ==

    2021-11-06:3的幂.给定一个整数,写一个函数来判断它是否是 3 的幂次方.如果是,返回 true :否则,返回 false .整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == ...

  10. vue全家桶进阶之路45:Vue3 Element Plus el_button组件

    在 Vue 3 中,Element Plus 的 ElButton 组件提供了多种按钮类型和属性,可以用于实现不同的交互效果.下面是 ElButton 常用的作用和属性: 作用: 用于在页面上添加交互 ...