@Value是个什么东西

鼠扑  金牌会员 | 2024-3-18 03:46:44 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 939|帖子 939|积分 2817

对注解不了解的可以看一下:
Java注解,看完就会用

首先我们要明确:
@Value 是 Spring 框架的注解。
它有什么作用呢?
作用

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

常量注入

顾名思义,就是把一个写死的值赋给对应变量,形式如下:
  1. // 注入普通字符串
  2. @Value("Bin")
  3. private String username; 
  4. // 注入文件资源
  5. @Value("classpath:com/test/config.xml")
  6. private Resource resource; 
  7. // 注入URL资源
  8. @Value("http://www.baidu.com")
  9. private Resource url; 
复制代码
以上做法显而易见,并不能做到动态配置。
这跟直接赋值有啥区别?
所以这种方式应用很少,知道有这么个用法就行了。
读取配置文件

这种是应用最多的方式了,重点记住这种。
形式也简单,废话不多说,直接上代码。
配置文件 application.properties 或者 application.yml,写法略有不同。
application.properties:
  1. common.name=bin
复制代码
application.yml:
  1. common:
  2.   name: bin
复制代码
  1. @Value("${common.name}")
  2. private String name; 
  3. // 配置文件找不到的话,给一个默认值
  4. @Value("${common.name:JohnDoe}")   
  5. private String name;
复制代码
读取Bean的属性

读取Bean属性与读取配置文件属性用法不一样,前者使用 $ 符号,后者使用 # 符号
首先将对象注册到 Spring 容器中:
  1. @Data
  2. @Component
  3. public class User {
  4.     private String id;
  5.     private String name;
  6. }
复制代码
Bean 属性注入:
  1. @Value("#{user.name}")
  2. private String name;
复制代码
使用案例

最后我们用一个简单案例做一个实现。
创建一个Bean对象:
  1. @Component
  2. @Data
  3. public class Person {
  4.     
  5.     @Value("bin")
  6.     private String name;
  7.     
  8.     @Value("${age}")
  9.     private Integer age;
  10. }
复制代码
配置文件:
  1. age=22
复制代码
测试:
  1. @SpringBootTest
  2. class DemoApplicationTests {
  3.     // 读取bean属性
  4.     @Value("#{person.name}")
  5.     private String name;
  6.     // 读取bean属性
  7.     @Value("#{person.age}")
  8.     private String age;
  9.     
  10.     @Test
  11.     void contextLoads() {
  12.         System.out.println("常量注入获取name为:" + name);
  13.         System.out.println("常量注入获取age为:" + age);
  14.     }
  15. }
复制代码
结果:
  1. 常量注入获取name为:bin
  2. 常量注入获取age为:22
复制代码
以上就是对 @Value 的简单介绍,其实@Value还有许多高级用法,本篇不再深入。
发类似这样的小文章的目的都是为了将一些小知识点作为前置,为了在以后说一些艰难晦涩的内容时少啰嗦一些基础。
天下难事,必作于易;
天下大事,必作于细。
联系我:
https://stanezhang.github.io/

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表