首页 > 其他分享 >@Value是个什么东西

@Value是个什么东西

时间:2024-01-03 12:07:07浏览次数:31  
标签:name 东西 什么 private Value 注入 age String

对注解不了解的可以看一下:

Java注解,看完就会用

@Value是个什么东西_注解

首先我们要明确:

@Value 是 Spring 框架的注解。

它有什么作用呢?


作用

@Value 通过注解将常量配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值。

使用方式

常量注入

顾名思义,就是把一个写死的值赋给对应变量,形式如下:

// 注入普通字符串
@Value("Bin")
private String username; 

// 注入文件资源
@Value("classpath:com/test/config.xml")
private Resource resource; 

// 注入URL资源
@Value("http://www.baidu.com")
private Resource url;

以上做法显而易见,并不能做到动态配置。

这跟直接赋值有啥区别?

所以这种方式应用很少,知道有这么个用法就行了。

读取配置文件

这种是应用最多的方式了,重点记住这种。

形式也简单,废话不多说,直接上代码。

配置文件 application.properties 或者 application.yml,写法略有不同。

application.properties:

common.name=bin

application.yml:

common:
  name: bin
@Value("${common.name}")
private String name; 

// 配置文件找不到的话,给一个默认值
@Value("${common.name:JohnDoe}")   
private String name;

读取Bean的属性

读取Bean属性与读取配置文件属性用法不一样,前者使用 $ 符号,后者使用 # 符号

首先将对象注册到 Spring 容器中:

@Data
@Component
public class User {
    private String id;
    private String name;
}

Bean 属性注入:

@Value("#{user.name}")
private String name;

使用案例

最后我们用一个简单案例做一个实现。

创建一个Bean对象:

@Component
@Data
public class Person {
    
    @Value("bin")
    private String name;
    
    @Value("${age}")
    private Integer age;
}

配置文件:

age=22

测试:

@SpringBootTest
class DemoApplicationTests {
    // 读取bean属性
    @Value("#{person.name}")
    private String name;
    // 读取bean属性
    @Value("#{person.age}")
    private String age;
    
    @Test
    void contextLoads() {
        System.out.println("常量注入获取name为:" + name);
        System.out.println("常量注入获取age为:" + age);
    }
}

结果:

常量注入获取name为:bin
常量注入获取age为:22

以上就是对 @Value 的简单介绍,其实@Value还有许多高级用法,本篇不再深入。

发类似这样的小文章的目的都是为了将一些小知识点作为前置,为了在以后说一些艰难晦涩的内容时少啰嗦一些基础。

天下难事,必作于易;

天下大事,必作于细。


联系我:

https://stanezhang.github.io/


标签:name,东西,什么,private,Value,注入,age,String
From: https://blog.51cto.com/u_16410497/9081416

相关文章

  • 搭建的英文网站建站系统有什么好处?
    在当今数字化时代,拥有一个强大而高效的网站对于企业和个人而言变得至关重要。在建立网站的过程中,选择适当的建站系统是至关重要的一步。在这方面,使用搭建的英文网站建站系统具有许多显著的好处。1.灵活性和可定制性搭建的英文网站建站系统为用户提供了极大的灵活性和可定制性。用......
  • 搭建的英文网站建站系统有什么好处?
    在当今数字化时代,拥有一个强大而高效的网站对于企业和个人而言变得至关重要。在建立网站的过程中,选择适当的建站系统是至关重要的一步。在这方面,使用搭建的英文网站建站系统具有许多显著的好处。1.灵活性和可定制性搭建的英文网站建站系统为用户提供了极大的灵活性和可定制性。用......
  • 【技术问题】less里面&代表什么
    在Less中,&符号通常用于引用父选择器。在嵌套的样式规则中,&表示对父选择器的引用,可以帮助你避免重复代码并更方便地管理样式。例如,考虑以下Less代码:.button{color:blue;&:hover{color:red;}&.active{font-weight:bold;}}在上面的例子中,&:hover引......
  • TDD、BDD、ATDD都是什么、有什么区别?(下)
    在《TDD、BDD、ATDD都是什么、有什么区别(上)》中,探讨TDD、BDD和ATDD的概念。虽然TDD、BDD和ATDD都是软件开发中使用的测试方法,但它们在方法和重点上有所不同。TDD、BDD和ATDD之间的主要区别在于关注点、抽象层级和协作。1、关注点TDD侧重于测试代码并确保它满足需求。BDD关注软件的......
  • 什么是数据销毁,为什么数据销毁很重要
    当大多数人听到“数据破坏”时,他们的脸上都会表现出恐惧的表情。世界上大多数人最不想要的就是销毁他们计算机或移动设备上的数据。但现实情况是,无论您是大型、中型还是小型企业的所有者,总有一天您需要移除或更换旧媒体,并且您需要确保存储在该媒体上的所有数据都已删除且不可恢复.......
  • 一行代码也不写,拿Github Copliot + DallE3做一个小游戏是什么体验?
    我全程没写一句代码...   乡村爱情15看完了,晚上也没什么事,就寻思折腾点事做,儿子问我小时候最爱玩什么游戏,我毫不犹豫的说1945,正好这个事情给了我一个brainstorming,那我自己写一个简单的1945可不可以?   说干就干,但是我也没写过游戏,于是我开启了GitHubCopliot...  ......
  • 为什么Android系统开发工程师这么稀缺?
    前言今日得闲,思考了一个问题。为什么Android系统开发工程师各个公司都在招聘,而且是每天都在招,工资待遇也很客观,但结果却找不到人?首先,我们来看下Android系统开发工程师的主要职责是什么,以下是招聘网的要求。根据以上要求,我们来分析一下:本科学历,这个要求目前基本上都可以满足,再高一点......
  • Invalid constant value.问题
    Invalidconstantvalue.问题在你的_RecordDay类中,你定义了一个const构造函数:const_RecordDay(this.orientation);但是在build方法中,你使用了这个构造函数:RecordDay(orientation==Orientation.portrait),这里的问题是,你在构造函数中使用了const,但是在实际调用构造函数时,......
  • OpenEuler【NetworkManager】为什么ifcfg-ethX网卡配置文件修改后不生
    1问题现象修改/etc/sysconfig/network-scripts/ifcfg-ethX网卡配置文件中的ip地址后,重启NetworkManager服务,网卡ip未生效2问题原因在不重启系统的情况下,仅重启NetworkManager服务,它不会重新读取/etc/sysconfig/network-scripts/目录下的网卡配置文件并生效。可以通过以下几......
  • 嘉为蓝鲸张敏:运维体系为什么要基于平台化建设
    摘要:笔者根据自身的技术和行业理解,解析运维平台化的内涵和实践。涉及关键词:一体化运维、平台化运维、数智化运维、运维PaaS、运维架构治理、蓝鲸等。本文作者:嘉为蓝鲸运维产品及解决方案负责人张敏全文共计5500字,预计阅读时间12min。01运维平台的概念被泛化近几年行业发展和客户实......