SpringBoot快速入门-SpringBoot配置绑定 @ConfigurationProperties的用法详解

SpringBoot在application.yml中配置了全局信息,这些配置信息的引用有三种方法:
1、@Value
2、@ConfigurationProperties
3、@PropertySource

@ConfigurationProperties可以直接实现一个对象的自动绑定,我们详细来看一下@ConfigurationProperties的使用方法。
看demo

yml文件中配置:

person:
  name: "张三"
  age: 20
  amount: 100
/**
 * @Auther: www.itzhimei.com
 * @Description:
 */
@Component
@Data
@ConfigurationProperties(prefix = "person")
public class Person7 {
    private String name;
    private int age;
    private BigDecimal amount;

    public Person7() {
    }

    @Override
    public String toString() {
        System.out.println("zhuanhuan");
        return "Person[name:"+name+",age:"+age+"]";
    }

}


@RestController
public class App2
{

    @Autowired
    private Person7 person7;

    @GetMapping("/getPerson7")
    public Person7 getPerson7() {
        return person7;
    }

}

启动服务,从浏览器访问:http://localhost:8081/getPerson7
浏览器输出:{“name”:”张三”,”age”:20,”amount”:100}
这里的demo先定义了一个Person7,并使用了注解@Component和@ConfigurationProperties(prefix = “person”),同时@ConfigurationProperties指定了前缀,这个很好理解,因为我们是要绑定一个对象的配置,在配置中文件中,肯定是有前缀的,所以需要指定前缀信息,配置像这样:

person:
  name: "张三"
  age: 20
  amount: 100

还有另一种写法,也能实现基于对象的配置注入,在项目的一个有@Configuration注解类上,添加注解:

@SpringBootApplication(scanBasePackages = "com")
@EnableConfigurationProperties(Person8.class)
public class App {
......
}
也能实现基于一个对象的配置信息注入。
@Data
@ConfigurationProperties(prefix = "person2")
public class Person8 {
    private String name;
    private int age;
    private BigDecimal amount;

    public Person8() {
    }

    @Override
    public String toString() {
        System.out.println("zhuanhuan");
        return "Person[name:"+name+",age:"+age+"]";
    }

}

此时Person8就不需要使用@Component注解了。
@Component和@EnableConfigurationProperties的目的都是能够让容器发现我们的配置类。