@Value 取赋值详解与 @ConfigurationProperties 对比

本文为转载,原文地址:地址

本文导读

  • @Value 与 @ConfigurationProperties 都可以从全局配置文件中获取值然后注入到属性中
  • 本来主要讲解两种取值以及注入值的区别
  • 对于 "@ConfigurationProperties 注入值"不了解的可以参考《Spring Boot 全局配置文件》

@Value 取值注入

* 以前在Spring核心配置文件beans.xml用如下配置为某个类的属性注入值
* <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
*      <property name="driverClassName" value="${jdbc.driverclass}"></property>
*      <property name="url" value="${jdbc.url}"></property>
*      <property name="username" value="root"></property>
*      <property name="password" value="123456"></property>
* </bean>
* 现在直接使用 @Value (xxx) 注解 就可以直接为某个属性注入值了,等价于上面

application. yml

  • 后面会使用“@Value”从"application.yml"配置文件中取值

server:
   port: 8081
user:
   id: 110
   lastName: 张三
   age: 110
   birthday: 2018/07/11
   colorList:
     - red
     - yellow
     - green
   cityMap: {mapK1: mapV1,mapK2: mapV2}
   dog:
     id: 9527
     name: 哮天犬
     age: 100

POJO 属性取赋值

package com.lct.wmx.damain;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * Created by Administrator on 2018/7/11 0011.
 * 狗 实体类
 *
 * @Component 无论是@ConfigurationProperties还是@Value注入值,都必须先使本来成为-
 * Spring容器中的组件,这样Spring容器才能为它DI注入值
 */
@Component
public class Dog {

    /**
     * 赋值普通的Java数据类型值
     */
    @Value("1000")
    private Integer id;

    /**
     * ${key}:从环境变量以及配置文件中获取值
     */
    @Value("${user.lastName}")
    private String name;

    /**
     * #{SpEL}Sping 表达式语言
     */
    @Value("#{10*3}")
    private Integer age;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "age=" + age +
                ", id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

测试 运行

 

package com.lct.wmx;

import com.lct.wmx.damain.Dog;
import com.lct.wmx.damain.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

/**
 * SpringBoot单元测试
 * 可以在测试期间很方便的类似编码一样进行自动注入等容器的功能
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloWorldQuickApplicationTests {

    /**
     * 因为POJO类使用了@Component注解,就是Spring一个组件,交由了Spring容器注入值
     * 所以使用@Autowired或者@ResourceDI注入在取值即可
     */
    @Resource
    private Dog dog;

    @Test
    public void contextLoads() {
        System.out.println("------------------------------********************--------------------------------------------");
        System.out.println("·······················" + dog);
    }
}

区别总览表

对比项    @ConfigurationProperties@Value
注解功能将配置文件中的属性值批量注入类的各个属性为类中的各个属性逐个赋值
松散绑定支持不支持
SpEL(Spring 表达式)不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持
   
  • 两者都可以从配置文件 .yml 与 .properties 中获取到值;
  • 如果项目中只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value即可;
  • 如果项目中专门编写了一个JavaBean来和配置文件进行映射,则直接使用@ConfigurationProperties即可;
  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值