@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;
    }
}

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

相关推荐
ps酷教程7 小时前
Jackson 解决没有无参构造函数的反序列化问题
java
NiceCloud喜云7 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
_日拱一卒8 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
隔窗听雨眠8 小时前
Nginx网关响应慢排查手记
java·服务器·nginx
智慧物业老杨9 小时前
智慧物业合同周期管理系统:从风险预警到智能交接的全流程数智化落地方案
java·人工智能·python
源码宝9 小时前
MES系统源码:Java8 + SpringBoot2.7 + MySQL8 + Redis,后端源码清爽易扩展
java·后端·源码·springboot·mes系统·源码二开·mes源码
JAVA社区9 小时前
Java高级全套教程(十)—— SpringCloudAlibaba超详细实战详解
java·开发语言·spring cloud·面试·职场和发展
金銀銅鐵9 小时前
[Java] 如何理解 class 文件中方法的 descriptor?
java·后端
云烟成雨TD10 小时前
Spring AI Alibaba 1.x 系列【63】AI Agent 长期记忆
java·人工智能·spring
憧憬成为java架构高手的小白10 小时前
苍穹外卖--day09
java·spring boot·百度