百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

@Value 注解的用法你知多少(@value注解怎么用)

toqiye 2024-08-10 21:12 4 浏览 0 评论



@Value是Spring框架中用于从属性文件或配置文件中注入值的一种注解。它可以用于注入各种类型的值,包括字符串、整数、布尔值等。@Value注解的用法有以下几种:

  1. 从配置文件中获取值:@Value("#{xxxx}")。例如,如果有一个application.yaml文件,其中配置了user: userName: 张三,那么可以直接使用@Value(“#{user.userName}”)。
  2. 从系统属性中获取值:@Value("#{systemProperties['xxxx']}")。例如,要从系统属性获取'java.version'的值,可以使用@Value(“#{systemProperties['java.version']}")。
  3. 从系统环境变量中获取值:@Value("#{environment['xxxx']}")。例如,要从系统环境变量中获取'JAVA_HOME'的值,可以使用@Value(“#{environment['JAVA_HOME']}")。
  4. 默认值:如果在配置文件或系统属性中没有找到对应的值,那么将使用默认值。例如,@Value(“${user.add:shangdong}")表示如果找不到'user.add'的值,那么将使用'shangdong'作为默认值。
  5. 常量注入:还可以直接将一个值注入到一个字段中。例如,@Value("20")表示将'20'这个值注入到被注解的字段中。
  6. 数组属性注入:例如,配置项为user.nums: 1,2,3 ,引入为@Value("${user.nums:1,2,3}") private String[] valueName; 。
  7. 列表属性注入:springboot 2.4.x以上的版本可以复用上述3的方式,更早版本需要以下方式:@Value("#{'${value.valueName}'.split(',')}") private List<String> valueNames; 。

需要注意的是,@Value注解只能用于Spring管理的Bean中,不能用于普通的Java类中。此外,如果在配置文件中找不到对应的属性值,那么将使用默认值。如果配置文件中的属性值被注释掉了,那么也会使用默认值。

yml配置:

user:
  userName: 张三
  valueName: 1,3,4

spring:
  application:
    name: springboot

代码示例:

package xyz.qq66179820.springboot.config;

import lombok.ToString;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import java.util.List;

/**
 * @Value 注解示例
 *
 * @author lihj
 * @version 1.0.0
 * @date 2023/11/5
 */
@Configuration
@ToString
public class ValueConfig {
    /**
     * 从配置文件中获取值
     */
    @Value("${user.userName}")
    public String userName;

    /**
     * 从系统属性中获取值
     * 等同于 System.getProperty("java.version")
     */
    @Value("#{systemProperties['java.version']}")
    public String sysProperty;

    /**
     * 从系统环境变量中获取值
     * 等同于 System.getenv("JAVA_HOME")
     */
    @Value("#{environment['JAVA_HOME']}")
    public String sysEvn;

    /**
     * 默认值
     */
    @Value("${user.add:shangdong}")
    public String strDefault;

    /**
     * 常量注入
     */
    @Value("20")
    public Integer age;

    /**
     * 数组属性注入
     */
    @Value("${user.nums:1,2,3}")
    public String[] nums;

    /**
     * 列表属性注入
     * springboot 2.4 以前的版本需要已下发方式实现
     */
    @Value("#{'${user.valueName}'.split(',')}")
    public List<String> valueNames;
}

测试代码:

		ApplicationContext run = SpringApplication.run(SpringbootBasicKnowledgeApplication.class, args);
		ValueConfig bean = run.getBean(ValueConfig.class);
		System.out.println("bean = " + bean);

输出:

bean = ValueConfig(userName=张三, sysProperty=1.8.0_241, sysEvn=C:\Java\jdk1.8.0_241, strDefault=shangdong, age=20, nums=[1, 2, 3], valueNames=[1, 3, 4])

相关推荐

暗网是什么?到底有多可怕?(暗网有多可怕)

https://mp.weixin.qq.com/s/O7l4rveLnXLt-XE2A0WZ3g

“暗网”是什么,到底有多可怕,互联网的“另外一个世界”

来源成戈科技说悄悄告诉你何为“暗网”,暗网的用途是什么?到底多可怕?暗网的英文是“deepnet或deepweb”,也就是深网的意思,我们都知道,南北极的冰川看起来非常雄伟,但是你物理稍微懂一点你就...

什么是暗网?暗网有什么用?进来我告诉你

网的英文是“deepnet或deepweb”,也就是深网的意思,我们都知道,南北极的冰川看起来非常雄伟,但是你物理稍微懂一点你就会知道,我们看到的只是冰山的10%,还有90%在水面以下,很容易看出来,...

网工跳槽必备,2022年最新大厂高频技术面试真题整理

2022年金三银四正在进行,很多粉丝问我要网络工程师面试方面的资料,有在学校准备实习的,有已经工作准备跳槽的。我翻看最近的笔记,正好有整理一份今年大厂的面试题分享给大家。可以先说的是,国内的互联网面试...

三天吃透操作系统面试八股文(三天吃透计算机网络八股文)

操作系统的四个特性?并发:同一段时间内多个程序执行(与并行区分,并行指的是同一时刻有多个事件,多处理器系统可以使程序并行执行)...

掌握前端面试八股文,提升个人能力,实战面试必备!

前言:前端面试是每个前端开发者职业发展中的重要环节。掌握一些常见的前端面试题目,不仅能够在面试中表现出色,还能够提升自身的技术能力和知识广度。本文将为你介绍一些实用的前端面试题目,帮助你在面试中脱颖而...

进大厂必备的Java八股文大全(2022最强精简易懂版)

2022年秋招即将来临,很多同学会问Java面试八股文有必要背吗?答案是,必须背,博主是个三本,今年凭借这篇八股文斩获了多个大厂暑期实习offer,相信秋招一定也可以发挥重要作用。你可以讨厌这种模式,...

2022最新软件测试八股文,能不能拿心仪Offer就看你背得怎样了

前言鉴于目前测试就业越来越严峻,内卷也成了测试领域的代名词了。我的一个HR朋友告诉我,由于门槛较低,现在普通测试岗(偏功能)的投递比已经将近100,也就是一个岗位差不多有百分简历投进来。所以现在还想从...

《面试八股文》之Dubbo17卷(面试 八股文)

作者:moon原文:https://mp.weixin.qq.com/s/-kVf5qWqcw-4AJF7LL3uWw前言...

前端面试八股文?不存在的!(2021前端面试问题)

最近刷到一位前端小姐姐海外工作分享的视频,分享了她的求职,面试以及工作生活的感受,了解到海外求职面试的一个过程,其中我们经常聊的...

凭借这份《2022测试八股文》候选者逆袭面试官,offer拿到手软

《2023测试面试八股文》800道软件测试面试真题,高清打印版打包带走,横扫软件测试面试高频问题,涵盖测试理论、Linux、MySQL、Web测试、接口测试、App测试、Python、Selen...

面试常考八股文及算法(一)(八股文的要求)

define和const的区别1.define是预处理指令,用于创建符号常量。`const`是C和C++的关键字,用于创建具有常量值的变量,本质是只读变量。2.`define`在预处理阶...

面试必备(背)--计算机网络八股文系列

1.OSI七层、TCP/IP四层的关系和区别?七层模型,亦称OSI(OpenSystemInterconnection),它是一个七层的、抽象的模型体,不仅包括一系列抽象的术语或概念,也包括...

Java面试一定要坚持背的八股文!错过会很可惜!

很多人对java面试题都嗤之以鼻,认为无法衡量出一个程序员的真实水平。还有一部分原因,也是因为太难背了。那我们到底还要不要背?背!当然要背!但也不是死记硬背。在我们背诵的过程中,就把java的核心知识...

面试问八股文的公司都是垃圾?(八股文负面影响)

做医生的需要有医师资格证,做财务的有CPA证书,做教师的有教师资格证等等,做程序员的从来没听说过面试的时候需要你提供什么证书,既然没有可以证明从业能力的证书,那面试的时候如何来判断候选人的基本能力呢?...

取消回复欢迎 发表评论: