首页 > 其他分享 >【Spring boot】 @Value注解

【Spring boot】 @Value注解

时间:2023-04-11 15:14:17浏览次数:35  
标签:name 配置文件 Spring boot ids Value yml 注入

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

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没有对应值时,启动报错

标签:name,配置文件,Spring,boot,ids,Value,yml,注入
From: https://www.cnblogs.com/HelloWxl/p/17306299.html

相关文章

  • SpringBoot---文件上传
    静态资源访问使用IDEA创建SPringBoot项目,会默认创建出classpath:/static/目录,静态资源一般放在这个目录下即可。如果默认的静态资源过滤策略不能满足开发需求,也可以自定义静态资源过滤策略。在application.properties中直接定义过滤规则和静态资源位置:spring.mvc.stati......
  • macOS Big Sur 11.7.6 (20G1231) Boot ISO 原版可引导镜像
    本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。另外也支持在Windows和Linux中创建可引导介质。2023年4月10日(北京时间11日凌晨),Apple为那些无法更新macOSVentura的旧Mac发布了macOSBig......
  • macOS Ventura 13.3.1 (22E261) Boot ISO 原版可引导镜像
    本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。另外也支持在Windows和Linux中创建可引导介质。macOSVentura13.3.1为Mac提供下列重要的错误修复和安全性更新(2023年4月7日):推手表情符号无法......
  • macOS Monterey 12.6.5 (21G531) Boot ISO 原版可引导镜像
    本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。另外也支持在Windows和Linux中创建可引导介质。2023年4月10日(北京时间11日凌晨),Apple为那些无法更新macOSVentura的旧Mac发布了macOSBig......
  • Springboot报错:Could not resolve view with name 'index' in servlet with name 'dis
    该异常是因为用定义了带@EnableWebMvc注解的配置类后发生的,在带该注解的配置类中加入下面的代码就可以了:@BeanpublicInternalResourceViewResolverviewResolver(){InternalResourceViewResolverviewResolver=newInternalResourceViewResolver();viewResolver.......
  • SpringBoot线程池和Java线程池的实现原理
    使用默认的线程池方式一:通过@Async注解调用publicclassAsyncTest{@Asyncpublicvoidasync(Stringname)throwsInterruptedException{System.out.println("async"+name+""+Thread.currentThread().getName());Thread.sleep(10......
  • SEE 06 Time Value of Money
    TimeValueofMoney6.1Timeismoney“Interest”“Interestrate”6.2RealandNominalInterestRatesnominalinterestrate:theinterestrateusuallyreportedandnotcorrectedforinflation.realinterestrates:Therealinterestrateatwhichthep......
  • Bootstrap
    为了提高开发效率,前端开发者都会使用一些现成的前端组件来进行开发,本节将给大家讲解由Twitter开源的前端框架BootStrap,他的内部集成了HTML、CSS、JavaScript很多功能和组件,让开发者可以快速开发网站。Bootstrap是一个用于构建响应式(根据用户设备不同做出响应)网站的前端框架,2011......
  • SpringBoot 集成 MybatisPlus 五——ActiveRecord
    1什么是ActiveRecordActiveRecord(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。在ActiveRecord模式中,对象中既有持久存储的数据,也有针对数据的操作,ActiveRecord模式把数据增删改查的逻辑作为对象的一......
  • SpringSecurity源码-构建ProviderManager
    简介在构建WenSecurity执行生命周期AbstractConfiguredSecurityBuilder#doBuild()方法中的init(),会执行到WebSecurityConfigurerAdapter#init(WebSecurityweb)方法,会去创建HttpSecurity。在创建HttpSecurity时调用authenticationManager()构建ProviderManager。 WebSecurityCo......