SpringBoot的属性赋值@Value的用法说明

作者:qq_41075649 时间:2023-10-16 13:08:27 

今天学习到了SpringBoot 的属性赋值@Value用法

先总结

  • @Value(" 张三 "):直接附在属性名上,在Bean初始化时,会赋初始值

  • @Value(" #{ 20 - 2 } "):可以用 #{ },里面可以写表达式,当然也可以直接 @Value(" #{ 18 } ") 或 @Value(" 18 ")

  • @Value(" ${ person.name } "):利用 ${ } 可以取出配置文件中的值

例子

配置类:

@PropertySource(value={"classpath:/person.properties"})
@Configuration
public class MainConfigOfPropertyValues {
?
?? ?@Bean
?? ?public Person person() {
?? ??? ?return new Person();
?? ?}?? ?
}
  • @Configuration:告诉 Spring 这是一个配置类

  • @PropertySource:关联配置文件,使用 @PropertySource 指定读取外部配置文件,保存到运行的环境变量中,然后可以用@Value(" ${ person.name } ") 获取环境变量中的值。

Bean :

public class Person {?
?? ?/*
?? ? * 使用@Value赋值:
?? ? * ?? ?1. 基本数值
?? ? * ?? ?2. 可以写 #{ }
?? ? * ?? ?3. 可以写 ${ },取出配置文件{properties}中的值
?? ? */
?? ?
?? ?@Value("张三")
?? ?private String name;
?? ?@Value("#{20-2}")
?? ?private int age;
?? ?@Value("${person.nickName}")
?? ?private String nickName;
?? ?
?? ?public String getNickName() {
?? ??? ?return nickName;
?? ?}
?? ?public void setNickName(String nickName) {
?? ??? ?this.nickName = nickName;
?? ?}
?? ?public String getName() {
?? ??? ?return name;
?? ?}
?? ?public void setName(String name) {
?? ??? ?this.name = name;
?? ?}
?? ?public int getAge() {
?? ??? ?return age;
?? ?}
?? ?public void setAge(int age) {
?? ??? ?this.age = age;
?? ?}
?? ?@Override
?? ?public String toString() {
?? ??? ?return "Person [name=" + name + ", age=" + age + ", nickName=" + nickName + "]";
?? ?}
?? ?public Person(String name, int age, String nickName) {
?? ??? ?super();
?? ??? ?this.name = name;
?? ??? ?this.age = age;
?? ??? ?this.nickName = nickName;
?? ?}
?? ?public Person() {
?? ??? ?super();
?? ??? ?// TODO Auto-generated constructor stub
?? ?}?? ?
}

配置文件:

person.nickName=\u5C0F\u4E09

这里面的 \u5C0F\u4E09 表示的是“小三”

而配置文件的位置: 

SpringBoot的属性赋值@Value的用法说明

运行:

public class IOCTest_PropertyValue {

//容器创建
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfPropertyValues.class);

//打印容器中Bean的name
private void printBeans(AnnotationConfigApplicationContext applicationContext) {
String[] definitionName = applicationContext.getBeanDefinitionNames();

for(String name : definitionName) {
System.out.println(name);
}
}

@Test
public void test01() {
printBeans(applicationContext);
System.out.println("-------------------------------------------------------");

//获得容器中的Person
Person person = (Person) applicationContext.getBean("person");
System.out.println(person);

//获得环境变量中的值
ConfigurableEnvironment environment = applicationContext.getEnvironment();
String property = environment.getProperty("person.nickName");
System.out.println("环境变量:"+property);
applicationContext.close();
}
}

运行结果:

SpringBoot的属性赋值@Value的用法说明

@Value的使用及注意事项

为什么使用

使用@Vlue可以实现对于线上项目的一些通用配置的修改;或者修改项目中可能出现变动,但是却又有很多地方都在使用的一些参数,这样我们我可直接通过修改配置文件而不用修改代码的方式来达到参数的修改的目的

参数形式

yml文件

(简单的参数)

test1:
? ? ?num: 1
? ? ?name: xiaoming

获取数据

@Value("${test1.num}")
private int num;
@Value("${test1.name}")
private String name;

(数组||集合)

test:
? array1: aaa,bbb,ccc
? array2: 111,222,333
? array3: 11.1,22.2,33.3
? list1: ddd,eeee,111,333,222,444

获取数据

//数组
@Value("${test.array1:}")
private String[] array1;
//集合
@Value("#{'${test.list1:}'.split(',')}")
private List<String> list1;
//集合进一步做空数据处理
@Value("#{'${test.list:}'.empty ? null : '${test.list:}'.split(',')}")
private List<String> testList;

(Map)

test:
? map1: '{"name": "zhangsan", "sex": "male"}'
? map2: '{"math": "90", "english": "85"}'

获取数据

@Value("#{${test.map2}}")
private Map<String,String> map1;
@Value("#{${test.map2}}")
private Map<String,Integer> map2;

前置条件(注意事项)

想要能够很好的使用的使用@Value 需要注意一些前置条件

1. 使用正确的注解

@Value的使用要找对目标,我们所使用的注解的引用时这样的

SpringBoot的属性赋值@Value的用法说明

2. yml文件的格式

如果你使用的是yml文件的话,需要注意yml文件的注意格式问题 ,基本上参数名之后的冒号之后都要加空格,一般情况下,冒号后面加了空格,参数名都会变为蓝色

SpringBoot的属性赋值@Value的用法说明

3. @Value使用的环境要求

  • 不能作用于静态变量(static);

  • 不能作用于常量(final);

  • 不能在非注册的类中使用(类需要被注册在spring上下文中,如用@Service,@RestController,@Component等);

  • 使用这个类时,只能通过依赖注入的方式,用new的方式是不会自动注入这些配置的。

来源:https://blog.csdn.net/qq_41075649/article/details/83419588

标签:SpringBoot,属性赋值,@Value
0
投稿

猜你喜欢

  • java 中基本算法之希尔排序的实例详解

    2023-07-30 12:26:37
  • C#中的引用类型以及特殊引用类型详解

    2023-06-18 01:43:46
  • Android 动态改变布局实例详解

    2023-11-25 22:04:49
  • Apache Commons Math3探索之多项式曲线拟合实现代码

    2023-11-16 22:01:56
  • 关于java关键字this和super的区别和理解

    2022-08-01 14:33:09
  • 实例分析java对象的序列化和反序列化

    2022-07-11 00:22:41
  • springmvc如何使用POJO作为参数

    2021-06-02 00:29:46
  • Android自定义实现可滑动按钮

    2021-10-21 08:24:11
  • VC实现屏幕截词功能的方法详解

    2022-08-05 07:22:18
  • 函数指针与指针函数的学习总结

    2023-07-07 13:13:50
  • SprinBoot整合Quart实现定时调度的示例代码

    2021-12-07 21:30:59
  • SpringBoot详解如何进行整合Druid数据源

    2022-05-10 10:46:54
  • Springboot添加支付接口

    2023-06-21 00:10:20
  • Eclipse下编写java程序突然不会自动生成R.java文件和包的解决办法

    2023-11-19 00:24:05
  • C/C++ 左移<<, 右移>>的作用及说明

    2021-12-30 01:42:59
  • 在springboot中如何使用filter设置要排除的URL

    2022-11-06 00:06:01
  • mybatis日志打印的两款IDEA插件推荐

    2022-01-12 07:55:52
  • C#获取进程或线程相关信息的方法

    2021-06-27 16:37:23
  • 图文浅析Java序列化和反序列化

    2022-08-03 17:46:59
  • SpringBoot如何返回Json数据格式

    2023-01-12 16:28:51
  • asp之家 软件编程 m.aspxhome.com