服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringBoot的属性赋值@Value的用法说明

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

2022-10-25 14:57qq_41075649 Java教程

这篇文章主要介绍了SpringBoot的属性赋值@Value的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

先总结

  • @Value(" 张三 "):直接附在属性名上,在Bean初始化时,会赋初始值
  • @Value(" #{ 20 - 2 } "):可以用 #{ },里面可以写表达式,当然也可以直接 @Value(" #{ 18 } ") 或 @Value(" 18 ")
  • @Value(" ${ person.name } "):利用 ${ } 可以取出配置文件中的值

例子

配置类:

?
1
2
3
4
5
6
7
8
9
@PropertySource(value={"classpath:/person.properties"})
@Configuration
public class MainConfigOfPropertyValues {
 
    @Bean
    public Person person() {
        return new Person();
    }    
}
  • @Configuration:告诉 Spring 这是一个配置类
  • @PropertySource:关联配置文件,使用 @PropertySource 指定读取外部配置文件,保存到运行的环境变量中,然后可以用@Value(" ${ person.name } ") 获取环境变量中的值。

Bean :

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
    }    
}

配置文件:

?
1
person.nickName=\u5C0F\u4E09

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

而配置文件的位置: 

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

运行:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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文件

(简单的参数)

?
1
2
3
test1:
     num: 1
     name: xiaoming

获取数据

?
1
2
3
4
@Value("${test1.num}")
private int num;
@Value("${test1.name}")
private String name;

(数组||集合)

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

获取数据

?
1
2
3
4
5
6
7
8
9
//数组
@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)

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

获取数据

?
1
2
3
4
@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

延伸 · 阅读

精彩推荐
  • Java教程详谈Spring框架之事务管理

    详谈Spring框架之事务管理

    下面小编就为大家带来一篇详谈Spring框架之事务管理。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    ThreadLocal_J11512021-01-07
  • Java教程Java核心教程之常见时间日期的处理方法

    Java核心教程之常见时间日期的处理方法

    这篇文章主要给大家介绍了关于Java核心教程之常见时间日期的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价...

    ruan_luqingnian6932021-08-08
  • Java教程Spring的Bean容器介绍

    Spring的Bean容器介绍

    今天小编就为大家分享一篇关于Spring的Bean容器介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    李灿辉5652021-06-30
  • Java教程Java动态代理和反射机制详解

    Java动态代理和反射机制详解

    这篇文章主要介绍了Java动态代理和反射机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着...

    MoreThinking5342021-07-22
  • Java教程struts2过滤器和拦截器的区别分析

    struts2过滤器和拦截器的区别分析

    这篇文章主要介绍了struts2过滤器和拦截器的区别,简单分析了struts2框架中过滤器和拦截器的概念与相关使用区别,需要的朋友可以参考下 ...

    沧海小强5232020-04-15
  • Java教程Java中关于Collections集合工具类的详细介绍

    Java中关于Collections集合工具类的详细介绍

    Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了将集合对象设置为不...

    叶绿体不忘呼吸12082022-01-22
  • Java教程浅谈Java 8 新增函数式接口到底是什么

    浅谈Java 8 新增函数式接口到底是什么

    这篇文章主要介绍了浅谈Java 8 新增函数式接口到底是什么,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    肖朋伟10392021-06-26
  • Java教程Java web基础学习之开发环境篇(详解)

    Java web基础学习之开发环境篇(详解)

    下面小编就为大家带来一篇Java web基础学习之开发环境篇(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Java教程网5242020-12-09