简单聊聊@ConfigurationProperties注解的使用以及与@Value注解的区别

用@ConfigurationProperties注解注入值;

  1. 先创建Person实体类对象
public class Person {
    private String Name;
    private int id;
    private String [] family;
    private List list;//创建一个list集合
    private Map map;
    private Dog dog;//Dog类引用变量
    public Person() {
    }

    public Person(String name, int id, String[] family, List list, Map map, Dog dog) {
        Name = name;
        this.id = id;
        this.family = family;
        this.list = list;
        this.map = map;
        this.dog = dog;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public int getId() {
        return id;
    }

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

    public String[] getFamily() {
        return family;
    }

    public void setFamily(String[] family) {
        this.family = family;
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    public Map getMap() {
        return map;
    }

    public void setMap(Map map) {
        this.map = map;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    @Override
    public String toString() {
        return "Person{" +
                "Name='" + Name + '\'' +
                ", id=" + id +
                ", family=" + Arrays.toString(family) +
                ", list=" + list +
                ", map=" + map +
                ", dog=" + dog +
                '}';
    }
}

2.创建Dog实体类


public class Dog {
    private String dogname;
    private int ID;

    public String getDogname() {
        return dogname;
    }

    public void setDogname(String dogname) {
        this.dogname = dogname;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "dogname='" + dogname + '\'' +
                ", ID=" + ID +
                '}';
    }
}

3.这时候我们在Springboot核心配置文件application.yml中配置了相对应的属性值

person:
  Name:  yangzhongliang
  id:  1
  family:  [yangzhongliang,xiaogou,xiaozhu]
  list:  [shouji,diannao,shubao]
  map:  {k1:  v1 ,k2:  v2}
  dog: {dogname:  niuniu , ID: 2}

4.这时候如果说我们Person实例对象想要批量注入属性,就可以使用我们的
@ConfigurationProperties注解了。

只需要在Person类上加上这两行注解。把Person类创建实例对象,然后把Springboot核心配置文件中的前缀为person的属性值传入到对象的属性中。

注意:(配置文件中的属性名称一定要和对象中的属性名称一致,因为底层是通过set方法注入的)

@Component//把这个类生成实例对象加载到IOC容器中
@ConfigurationProperties(prefix = "person")//意思是把Springboot的核心配置文件中前缀为Person的值注入到该类的属性中

测试:

 @Autowired
    private Person person;

    //我们之前学习的@Value注解是spring的

    @Value("${person.Name}")//使用Spring的spel表达式,调用Springboot配置文件中的Name属性值
    private String Chinaname;


    @Test
    public void Test1(){
        System.out.println(person);
        System.out.println(Chinaname);
    }

输出结果:

在这里插入图片描述

那@ConfigurationProperties注解又与我们在Spring中学习到的@Value注解有什么区别呢?

他们的区别就在下面:
在这里插入图片描述
举个实例,例如JSR303校验,我们可以通过@ConfigurationProperties注解来进行一个演示:
1.我们先创建一个实体类

public class MyEmail {
private String Email;

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        Email = email;
    }

    @Override
    public String toString() {
        return "MyEmail{" +
                "Email='" + Email + '\'' +
                '}';
    }
}

2.在Springboot核心配置文件中配置相对应的属性值

myemail:
  email:  lisi

3.这时候我们使用@ConfigurationProperties进行注入,给类上加上
@ConfigurationProperties注解。

@Component
@ConfigurationProperties(prefix = "myemail")

4.测试类:

    @Autowired
    private MyEmail myEmail;
    @Test
    public void Test2(){
        System.out.println(myEmail.getEmail());
    }

5.打印输出:
在这里插入图片描述正常注入成功并打印在控制台,但是如果我们使用JSR303数据校验,给MyEmail类上加上@Validated注解,并给变量Email属性设置@Email注解,使变量必须注入邮箱格式的属性值。

@Component
@ConfigurationProperties(prefix = "myemail")
@Validated//JSR303数据校验注解
public class MyEmail {
    @Email//使用@Email注解标注这个属性中的值必须为邮件格式
    private String Email;

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        Email = email;
    }

    @Override
    public String toString() {
        return "MyEmail{" +
                "Email='" + Email + '\'' +
                '}';
    }
}

这时候如果输出,会发现报错了。

在这里插入图片描述
如果这时候把核心配置文件中的属性值修改成邮箱格式。

myemail:
  email:  lisi@163.com

再次测试:
在这里插入图片描述

这时候成功在控制台中打印出来了。。。。。。。。。。。。。。。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杨某人的快乐学习日记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值