20、springboot类型安全的绑定(使用@ConfigurationProperties注解一次性拿到application.yml 配置文件中的多个属性值)

springboot类型安全的绑定


类型安全绑定就是把我们放在配置文件中的配置属性,批量的读到程序中来。

之前读取配置文件中的属性,使用的是 @Value 注解。

@Value 注解的局限:每次只能读取一个属性值。


@ConfigurationProperties注解

@ConfigurationProperties 这个可以一次读取很多属性,还能校验,所以这个就是类型安全绑定

@ConfigurationProperties注解可整体读取的多个属性或具有某种结构关系的一组属性,该注解有两个主要用法:修饰类和修饰方法


修饰属性处理类: 当该注解修饰的类被部署为容器中的Bean时,@ConfigurationProperties注解指定的属性将会被注入该Bean的属性。因此将@ConfigurationProperties注解修饰的类被称为 “属性处理类”。

@ConfigurationProperties注解修饰的类,就是一个“属性处理类”。


修饰@Bean修饰的方法: @Bean修饰的方法将会配置一个容器中的Bean,而@ConfigurationProperties注解指定的属性将会被注入该Bean的属性。


支持的属性:


  • prefix(或value):指定要加载带哪些前缀的属性。

  • ignoreInvalidFields():指定是否忽略无效字段值。
    比如处理类定义了某个字段的类型是Integer,但配置文件为该字段配置的值是abc,这就是无效的值。
    该属性值默认为false,也就是不忽略,这意味着配置文件中如果配置了无效值,将会导致异常。

  • ignoreUnknownFields():指定是否忽略未知(多余)的字段值。
    如果配置文件中配置的属性比处理类需要的属性更多,那多出来的属性就属于未知属性。
    该属性值默认为true,也就是自动忽略,这意味着配置文件中如果配置多余的属性值,将不会引起异常。

属性处理类

属性处理类的要求非常简单,只要为需要注入的属性提供成员变量,并提供对应的getter和setter方法即可。


启用 @ConfigurationProperties

@ConfigurationProperties修饰的类不会自动起作用,必须通过如下方式启用该注解:


方式1:

为@ConfigurationProperties注解修饰的类添加@Component注解。


方式2:

将@ConfigurationProperties注解修饰的类显式配置成容器中的Bean。就是用@Bean注解修饰。(和前一种方式的本质相同)

前面两种方式的本质是一样的,都是将属性处理类变成容器中的Bean


方式3:

使用@EnableConfigurationProperties注解,该注解可显式指定一个或多个属性处理类,Spring Boot将会启用这些属性处理类上的@ConfigurationProperties注解。


方式4:

使用@ConfigurationPropertiesScan注解,该注解指定启用一个或多个包及其子包下, 所有带@ConfigurationProperties注解的类。


代码示例


applicaiton.yml
# 测试 @ConfigurationProperties 注解,用来一次性读取配置文件中
me:
  appli:
    aName: 《蜡笔小新》
    adesc: ${me.appli.aName} 非常好看
    user02:
      uName: 野原新之助
      uAge: 5
    book02:
      bName: 《蜡笔小新漫画》
      bPrice: 100
#      如果这个属性值没有在属性类中被读取到,会被自动忽略,不会引起异常
      baddress: 地址

属性处理类:

用@ConfigurationProperties修饰,用@Component 注解启动@ConfigurationProperties注解

/* 这个类用@ConfigurationProperties注解修饰,可以叫属性处理类.
 * 通过 @ConfigurationProperties 注解,用来一次性读取application.yml配置文件中的多个属性值
 */
//prefix = "me.appli" 表示这个属性处理类只读取配置文件中开头为 me.appli 的属性
@RestController
@Data
@Component //启动@ConfigurationProperties注解
//这个注解修饰的类就是属性处理类,用来一次性读取application.yml配置文件中的多个属性值
@ConfigurationProperties(prefix = "me.appli")
public class ApplicationYmConfig {

    //测试 @ConfigurationProperties 注解,用来一次性读取application.yml配置文件中的多个属性值
    private String aName;
    private String adesc;
    private User02 user02;
    private Book02 book02;

    //创建一个User02内部类
    @Data
    public static class User02{
        private String uName;
        private int age;
    }
    //创建一个Book02内部类
    @Data
    public static class Book02{
        private String bName;
        private int bPrice;
    }
}

测试:
 * 这个类用来测试ApplicationYmConfig属性类中,使用@ConfigurationProperties注解,
 * 看能否一次性拿到application.yml 配置文件中的多个属性值
@RestController
public class ApplicationYmConfigTestController {

    //直接访问容器中的属性处理类的实例即可
    private ApplicationYmConfig applicationYmConfig;

    public ApplicationYmConfigTestController(ApplicationYmConfig applicationYmConfig) {
        this.applicationYmConfig = applicationYmConfig;
    }

    //直接返回对象,查看是否拿到属性值
    @GetMapping("/testApplicationYmConfig")
    public ApplicationYmConfig testApplicationYmConfig(){
        return applicationYmConfig;
    }
}


结果:

在这里插入图片描述


注释:

用@ConfigurationProperties 注解,只需要在类上面添加注解就可以一次性拿到yml配置文件中的多个属性值,不需要跟之前用@Value这个注解来一个一个拿。

@Value一个一个拿的方式

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值