05-Springboot构造器绑定:yml文件和Properties类的构造器绑定

上一篇:04-Springboot属性绑定:yum文件和Properties类的属性绑定https://blog.csdn.net/fsjwin/article/details/109699991

上一篇说了属性绑定,但是在springboot底层使用更多的还是构造器绑定:

在这里插入图片描述

1.YmlProperties.java

package com.yuhl;

import lombok.Data;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConstructorBinding;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author yuhl
 * @Date 2020/11/14 10:19
 * @Classname YmlProperties
 * @Description yml测试 Properties类
 */
@Data
@ToString
@ConstructorBinding //构造器绑定 和 @Component 只能有一个
@ConfigurationProperties(prefix = "yml") //从配置文件中读取数据的开图字符
public class YmlProperties {
    private String str;
    private String specialStr;
    private Integer num;
    private Double dnum;
    private Date birth;
    private List list;
    private Set set;
    private Map map;
    private List<User> users;
}

2. yml文件

yml:
  str: 普通字符串
  specialStr: "换\n行字符串"
  num: 520
  dnum: 520:22
  birth: 2020/11/11 11:11:11
  list:
    - 大鸟
    - 小鸟
    - 中鸟
  set:
    - set1
    - set2
    - set3
  #set: [set3,set5,set6]
  map: {k1: v1, k2: v2}
  users:
    - name: yuhl
      age: 20
    - name: rll
      age: 18

ymlother:
  str: 普通字符串
  specialStr: "换\n行字符串"
  num: 520
  dnum: 520:22
  birth: 2020/11/11 11:11:11
  list:
    - 大鸟
    - 小鸟
    - 中鸟
  set:
    - set1
    - set2
    - set3
  #set: [set3,set5,set6]
  map: {k1: v1, k2: v2}
  users:
    - name: yuhl
      age: 20
    - name: rll
      age: 18

validata:
  num: 100

3.控制器HelloController

package com.yuhl;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author yuhl
 * @Date 2020/11/14 8:54
 * @Classname controller
 * @Description TODO
 */
@RestController
@EnableConfigurationProperties(YmlProperties.class)
public class HelloController {
    //注入
    @Autowired
    YmlProperties ymlProperties;
    @RequestMapping("/yml")
    public YmlProperties yml() {
        System.out.println("properties:" +ymlProperties);
        return ymlProperties;
    }
}

4.测试

在这里插入图片描述

5.属性注入变形

  1. 属性绑定的案例中我们同样也可以使用@EnableConfigurationProperties,此时不需要提供@Component。
  2. 如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component,那么在IOC容器中是获取不到properties 配置文件转化的bean。
  3. 而如果使用@EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了启用注入
  4. 这样的话Properiteis文件上就可以不用@Component了。只需要在使用它的类上写上@EnableConfigurationProperties(YmlProperties.class)
    即可。

下一篇:06-Springboo第三方组件注入:yum文件和@Bean的第三方组件注入https://blog.csdn.net/fsjwin/article/details/109706247

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值