@Value使用详解快速入门

一. 概述

在日常开发过程中,经常会使用到@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;
    }
}

百看不如一练,上手练习一下吧!

相关推荐
黎雁·泠崖6 分钟前
Java static入门:概述+静态变量特点与基础实战
java·开发语言
努力也学不会java8 分钟前
【Spring Cloud】 服务注册/服务发现
人工智能·后端·算法·spring·spring cloud·容器·服务发现
一条大祥脚11 分钟前
26.1.21 根号分治 相向双指针
java·开发语言·redis
迦蓝叶19 分钟前
JDBC元数据深度实战:企业级数据资源目录系统构建指南
java·jdbc·企业级·数据资源·数据血缘·数据元管理·构建指南
chilavert31819 分钟前
技术演进中的开发沉思-327 JVM:内存区域与溢出异常(下)
java·jvm
冲刺逆向19 分钟前
【js逆向案例六】创宇盾(加速乐)通杀模版
java·前端·javascript
洛阳纸贵23 分钟前
JAVA高级工程师-消息中间件RabbitMQ工作模式(二)
java·rabbitmq·java-rabbitmq
沛沛老爹26 分钟前
Web开发者转型AI安全核心:Agent Skills沙盒环境与威胁缓解实战
java·前端·人工智能·安全·rag·web转型升级
像少年啦飞驰点、28 分钟前
Java大厂面试真题:Spring Boot + Kafka + Redis 在电商场景下的实战应用
java·spring boot·redis·分布式·kafka·面试题·电商秒杀