spring boot 手动value和自动注入配置的区别

Posted 你永远想象不到,一个光鲜亮丽的Application,有多么

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot 手动value和自动注入配置的区别相关的知识,希望对你有一定的参考价值。

前言

前面两篇中,写道我们注入配置的方式,是通过是注解的方式完成,如下:

@ConfigurationProperties(prefix ="person")

这意味着:

我们写一个person类,我们就需要在配置中写下person的配置。

但是现在有一个这样的需要,有一个新的配置类,需要的是person中的age。

理论上呢,我们可以再写一遍age,但是这样又耦合了。那么这时候可以使用value的方式来配置。

那么可以这样解决:

@Component
public class Newperson {

    @Value("${person.last-name}")
    private String lastName;

    @Override
    public String toString() {
        return "Newperson{" +
                "lastName=\'" + lastName + \'\\\'\' +
                ", age=" + age +
                \'}\';
    }

    @Value("${person.age}")
    private Integer age;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Integer getAge() {
        return age;
    }

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

我在一个新的newperson配置中引用了person的配置。

好的,那么这两种配置有什么区别:

第一个区别不用多说,第二个区别在于:

就是说value中只支持last-name,不支持lastName这种命名规则。

第三个区别在于value中可以写一些计算方式:

@Value("#{10*10}")
private Integer age;

第四个在于:

@Component
@Validated
@ConfigurationProperties(prefix ="person")
public class Person {
    @Email
    private String lastName;

通过自动配置的方式呢,你可以添加一些验证条件,如果不满足的话,那么会这样。

第五个在于:
不支持一些复杂的类型:如 Map<String, Object>。

以上是关于spring boot 手动value和自动注入配置的区别的主要内容,如果未能解决你的问题,请参考以下文章

如何在spring boot中将@Value属性从application.properties注入@InjectMocks?

spring-boot配置文件使用

Spring Boot自动注入原理

spring boot 配置注入

Spring boot中普通工具类不能使用@Value注入yml文件中的自定义参数的问题

Spring 属性依赖注入