一. 概述
在日常开发过程中,经常会使用到@Value()从yml配置中或从Nacos中读取配置,但是小伙伴们可能在也会遇到像我这样的问题吧,@value具体应该怎么使用呢?好的跟着鸣人同学来具体学习一下@value的使用详解吧
二. 使用详解
属性注入是我们经常会使用的一种方式,我们通常会将一些全局通用的配置信息写在YML或nacos配置中,所以学习@value的使用方式非常重要!
下述使用方式之前,在Java中必须注入在Spring容器管理的Bean对象,如@Component,@Service等
1.注入String 类型
tips: yml中的配置冒号后要加空格
properties
test:
name: 'skywalker'
pwd: '123456'
java
@Component
public class User {
//defaultName为可以设置的默认值
@Value("{test.name:defaultName}")
private String name;
@Value("{test.pwd:defaultPwd}")
private String pwd;
}
2.注入List类型
注入List类型有3种方式
properties
test:
# 第1种方式
userList: "skywalker,naruto"
# 第2种方式
userList2: "{'skywalker','naruto'}"
# 第三种方式
userList3:
- 'skywalker'
- 'naruto'
java代码中的注入方式
java
@Component
public class Test {
//以下三种方式和上述yml中的三种方式可以任意匹配,不是一对一的对应关系
@Value("${test.userList}")
private String[] users;
@Value("${test.userList2}")
private List<String> users2;
@Value("${test.userList3}")
private Set<String> users3;
}
3.注入Map类型
yml中的配置
properties
test:
# 第一种方式
userInfo: "{username: 'skywalker', password: '123456'}"
#第二种方式
userInfo2:
username: 'skywalker'
password: '123456'
java中的注入方式
java
@Component
public class Test {
@Value("#{${test.userInfo}}")
Map<String,String> userInfo;
}
三. 注入Map类型进阶
对于一个配置类文件,可以使用更优雅的注入方式,使用@ConfigurationProperties
properties
test:
# 第一种方式
userInfo: "{username: 'skywalker', password: '123456'}"
java中的配置方式
java
@Component
@ConfigurationProperties(prefix = "test.userInfo")
public class UserProperties {
private String username;
private String password;
public String getUsername(){
return username;
}
public void SetUsername(String username){
this.username = username;
}
public String getPassword(){
return password;
}
public void SetPassword(String password){
this.password = password;
}
}
百看不如一练,上手练习一下吧!