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

Java注解,看完就会用

首先我们要明确:

@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/

@Value是个什么东西的更多相关文章

  1. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  2. iOS有关横向TableView的东西

    之前看到Apple store里面有横向的tableview,当然也有可能是collectionview啦. 尤其是项目中只有一条那么需要横向滑动的东西,就没有必要使用庞大的collectionvie ...

  3. 使用ENode框架前您需要了解的东西(初稿)

    选择ENode意味着什么可能很多人还不太清楚.我简单整理了一下: 意味着你选择了:你需要做DDD领域建模.选择了事件驱动的架构.选择了CQRS架构.选择了最终一致性.选择了事件溯源.选择了分布式.这些 ...

  4. 如何写出高质量的技术博客 这边文章出自http://www.jianshu.com/p/ae9ab21a5730 觉得不错直接拿过来了 好东西要大家分享嘛

        如何写出高质量的技术博客?答案是:如果你想,就一定能写出高质量的技术博客.看起来很唯心,但这就是事实.有足够愿力去做一件目标明确,有良好反馈系统的事情往往很简单.就是不停地训练,慢慢地,你自己 ...

  5. Intellij IDEA的一些东西

    Intellij IDEA的一些东西 2016-03-19 15:26 Ctrl + R 在当前文件进行文本替换 (必备) Ctrl + N 根据输入的 类名 查找类文件 Ctrl + Ctrl + ...

  6. 神奇的BFC以及被忽略的东西

    BFC是CSS中一个非常重要的概念,经常用来清除浮动以及处理外边距折叠,但BFC到底是个什么东西却很难准确的表达清楚,国内的相关技术文档基本都不全面,本文的目的就是对BFC的方方面面做个整理,当然未必 ...

  7. 关于这个博客以及C++入门该懂的一些东西

    给三牧中学c++入门的同学们看的博客. 大概是入门一类的?说不定会写点自己的结题报告. 写的不好/写错了别怪我,蒟蒻瑟瑟发抖. 天哪要开始写入门了我好慌那么接下来是编译器连接. (本蒟蒻喜欢用DEV ...

  8. LabVIEW 吸星大法 - 看见的好东西都是我的(上篇)

    前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...

  9. 前端er是否忽略了某些东西?——读《ppk谈JavaScript》

    关于书 “不知道ppk的网站QuirksMode,说明你可能还没有真正成为资深的JavaScript程序员.” ——Roger Johansson,瑞典资深Web专家. ppk是世界级前端技术专家,W ...

  10. 解读SDN的东西、南北向接口

    北向接口(Northbound Interface)是为厂家或运营商进行接入和管理网络的接口,即向上提供的接口. 南向接口(Southbound Interface)是提供对其他厂家网元的管理功能,支 ...

随机推荐

  1. python实现简单的爬虫功能

    前言Python是一种广泛应用于爬虫的高级编程语言,它提供了许多强大的库和框架,可以轻松地创建自己的爬虫程序.在本文中,我们将介绍如何使用Python实现简单的爬虫功能,并提供相关的代码实例. 如何实 ...

  2. 【效率提升】maven 转 gradle 实战

    一.灵魂三问 1.gradle 是什么? 一个打包工具, 是一个开源构建自动化工具,足够灵活,可以构建几乎任何类型的软件,高性能.可扩展.能洞察等.其中洞察,可以用于分析构建过程中数据,提供分析参考, ...

  3. 算法打卡|Day1 数组part01

    Day1 数组part01 今日任务:数组理论基础,704. 二分查找,27. 移除元素 目录 Day1 数组part01 今日任务:数组理论基础,704. 二分查找,27. 移除元素 Part1: ...

  4. 算法1:寻找完数(JS)

    任务一:寻找完数 打印10000以内的完数 完数:与自己所有因子之和相等的数. 1 let sum = 0, i, j; // 定义变量sum.i和j 2 3 for (i = 1; i < 1 ...

  5. Excel--比较两列数据的异同

    首先得到的数据分为两列,两种类型.由于在网站上搜索的时候,网站的"特殊性"会将000638-32-4 前面的0全部去掉.变成了638-32-4.基于得到了两列稍有不同的数据.由于人 ...

  6. 一个树状数组求逆序对的进阶 [USACO17JAN] Promotion Counting P

    题面就这样,就是在树上求一个逆序对但是我笨笨地求了对于每一个下属有几个上司能力比他低还一遍就写对了,结果发现看错题目了难得一遍过,但是没有完全过

  7. NewStarCTF 2023 公开赛道 WEEK1|CRYPTO全解

    一.brainfuck 附件信息 ++++++++[>>++>++++>++++++>++++++++>++++++++++>++++++++++++> ...

  8. c# 光学三原色混合,颜色叠加-dong

    东的备注: 光的三原色:红.绿.蓝 红+绿=黄 红+蓝=品红 蓝+绿=青 红+绿+蓝=白 无颜色为黑 下看代码 Bitmap image1 = new Bitmap(500, 500);//红 Bit ...

  9. 详述Java内存屏障,透彻理解volatile

    一般来说内存屏障分为两层:编译器屏障和CPU屏障,前者只在编译期生效,目的是防止编译器生成乱序的内存访问指令:后者通过插入或修改特定的CPU指令,在运行时防止内存访问指令乱序执行. 下面简单说一下这两 ...

  10. 一篇学会cron表达式

    1.定义 Cron表达式是一种用于定义定时任务的格式化字符串.它被广泛用于Unix.Linux和类Unix系统中,用于在指定的时间执行预定的任务.Cron表达式由6个字段组成,每个字段通过空格分隔开. ...