SpringBoot如何配置文件给bean赋值问题

 更新时间:2024年05月16日 09:24:35   作者:键盘都敲坏了  
这篇文章主要介绍了SpringBoot如何配置文件给bean赋值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

方式一、使用yaml文件对bean进行注入

案例

(先来两个实体类做为案例测试用)

  • Car类
 
@Component
public class Car {
 
    String name;
    String pinpai;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getPinpai() {
        return pinpai;
    }
 
    public void setPinpai(String pinpai) {
        this.pinpai = pinpai;
    }
 
    public Car(String name, String pinpai) {
        this.name = name;
        this.pinpai = pinpai;
    }
 
    public Car() {
    }
 
    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", pinpai='" + pinpai + '\'' +
                '}';
    }
}
  • Person类
//此注解通过application.yaml里的person来注入参数
@ConfigurationProperties(prefix = "person")
@Component
@ConfigurationProperties(prefix = "person") //通过application.yaml里的person来注入参数
public class Person {
 
     String name;
    String age;
    String idcard;
    Map map;
    List list;
    Car car;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getAge() {
        return age;
    }
 
    public void setAge(String age) {
        this.age = age;
    }
 
    public String getIdcard() {
        return idcard;
    }
 
    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }
 
    public Map getMap() {
        return map;
    }
 
    public void setMap(Map map) {
        this.map = map;
    }
 
    public List getList() {
        return list;
    }
 
    public void setList(List list) {
        this.list = list;
    }
 
    public Car getCar() {
        return car;
    }
 
    public void setCar(Car car) {
        this.car = car;
    }
 
    public Person(String name, String age, String idcard, Map map, List list, Car car) {
        this.name = name;
        this.age = age;
        this.idcard = idcard;
        this.map = map;
        this.list = list;
        this.car = car;
    }
 
    public Person() {
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", idcard='" + idcard + '\'' +
                ", map=" + map +
                ", list=" + list +
                ", car=" + car +
                '}';
    }
}

application.yaml里的代码:

(注意一点的是yaml文件必须以application命名才能被springboot识别)

person:
  name: zhangsan
  age: 20
  idcard: 342115454
  map: {key: 1,key2: 2}
  list:
    - java
    - html
    - js
    - css
  car:
    name: 21款小奔奔
    pinpai: 国产汽车
  • yaml配置文件严格遵守层级关系,以及冒号后需要有一个空格
  • yaml文件中对于Map类型的赋值,最为方便的则是{key: value}形式
  • List类型的赋值 则是可以通过(- 值)的方式类赋值 也可以通过list: [值1,值2,值3]的方式,根据个人喜好选择
  • yaml文件中的key名必须和封装的实体类对象的属性名一致,否则无法注入

测试输出的信息为:

person{
    name='zhangsan', age='20', idcard='342115454', 
    map={key=1, key2=2}, list=[java, html, js, css],
    car=Car{name='21款小奔奔', pinpai='国产汽车'}
}

甚至还能玩的更花样一点:

person:
  name: zhangsan
  #在20后面加上随机的int整数
  age: 20${random.int}
  #随机生成的long的整数
  idcard: ${random.long}
  map: {key: 1,key2: 2}
  check: 大奔奔汽车
  list:
    - java
    - html
    - js
    - css
  car:
    name: 21款小奔奔
    #判断person中的key名为check的值是否存在,如果存在则注入person.check的值,不存在则注入小奔奔汽车
    pinpai: ${person.check:小奔奔汽车}

方式二、使用自定义配置文件对bean进行注入

案例

(还是先来两个实体类做为案例测试用)

  • Car类
@Component
public class Car1 {
 
    String name;
    String pinpai;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getPinpai() {
        return pinpai;
    }
 
    public void setPinpai(String pinpai) {
        this.pinpai = pinpai;
    }
 
    public Car1(String name, String pinpai) {
        this.name = name;
        this.pinpai = pinpai;
    }
 
    public Car1() {
    }
 
    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", pinpai='" + pinpai + '\'' +
                '}';
    }
}
  • Person类:
//javaConfig 绑定配置文件的值
//加载指定路径的配置文件  myconfig.properties
@PropertySource(value = "classpath:myconfig.properties")

再通过@Value("${key名}")来注入 ,key名则是配置文件中的key

@Component
//javaConfig 绑定配置文件的值
//加载指定配置文件
@PropertySource(value = "classpath:myconfig.properties")
public class Person1 {
 
    //SPEL表达式取出值
    @Value("${name}")
    String name;
    String age;
    String idcard;
    Map map;
    List list;
    Car1 car1;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getAge() {
        return age;
    }
 
    public void setAge(String age) {
        this.age = age;
    }
 
    public String getIdcard() {
        return idcard;
    }
 
    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }
 
    public Map getMap() {
        return map;
    }
 
    public void setMap(Map map) {
        this.map = map;
    }
 
    public List getList() {
        return list;
    }
 
    public void setList(List list) {
        this.list = list;
    }
 
    public Car1 getCar() {
        return car1;
    }
 
    public void setCar(Car1 car1) {
        this.car1 = car1;
    }
 
    public Person1(String name, String age, String idcard, Map map, List list, Car1 car1) {
        this.name = name;
        this.age = age;
        this.idcard = idcard;
        this.map = map;
        this.list = list;
        this.car1 = car1;
    }
 
    public Person1() {
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", idcard='" + idcard + '\'' +
                ", map=" + map +
                ", list=" + list +
                ", car=" + car1 +
                '}';
    }
}

自定义配置文件myconfig.properties的代码:

只做其中两个参数的案例

name=zhangsan
age=22

测试输出的信息为:

Person{name='zhangsan', age='22', idcard='null', map=null, list=null, car=null}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot后端上传文件类型检测方式

    SpringBoot后端上传文件类型检测方式

    这篇文章主要介绍了SpringBoot后端上传文件类型检测方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Spring事务失效的8大原因详解

    Spring事务失效的8大原因详解

    这篇文章主要介绍了Spring事务失效的8大原因详解,这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使用 InnoDB,需要的朋友可以参考下
    2023-09-09
  • spring boot activiti工作流的搭建与简单使用

    spring boot activiti工作流的搭建与简单使用

    这篇文章主要给大家介绍了关于spring boot activiti工作流的搭建与简单使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • SpringBoot中的@EnableConfigurationProperties注解原理及用法

    SpringBoot中的@EnableConfigurationProperties注解原理及用法

    在SpringBoot中,@EnableConfigurationProperties注解是一个非常有用的注解,它可以用于启用对特定配置类的支持,在本文中,我们将深入探讨@EnableConfigurationProperties注解,包括它的原理和如何使用,需要的朋友可以参考下
    2023-06-06
  • Struts中使用validate()输入校验方法详解

    Struts中使用validate()输入校验方法详解

    这篇文章主要介绍了Struts中使用validate()输入校验方法,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • IDEA自定义Maven archetype的方法步骤

    IDEA自定义Maven archetype的方法步骤

    在创建Maven的项目时我们发现了一个很不方便的问题,就是每次创建Maven的工程的时候,都需要选择一个骨架,本文主要介绍了IDEA自定义Maven archetype的方法步骤,感兴趣的可以了解一下
    2022-03-03
  • Java详解对象终止方法finalize()的用法

    Java详解对象终止方法finalize()的用法

    在前面的 jvm 中, 需要补充几个部分的内容, 接着来看 finalize() 机制, 它可以使接近死亡的对象复活, 下来我们来看是怎么一回事
    2022-05-05
  • Spring Boot示例代码整合Redis详解

    Spring Boot示例代码整合Redis详解

    SpringBoot对常用的数据库支持外,对NoSQL 数据库也进行了封装自动化,下面这篇文章主要给大家介绍了关于springboot使用redis的详细步骤,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Java Spring @Lazy延迟注入源码案例详解

    Java Spring @Lazy延迟注入源码案例详解

    这篇文章主要介绍了Java Spring @Lazy延迟注入源码案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • 关于Java的Condition接口最佳理解方式

    关于Java的Condition接口最佳理解方式

    这篇文章主要介绍了关于Java的Condition接口最佳理解方式,Condition就是实现了管程里面的条件变量,Java 语言内置的管程里只有一个条件变量,而Lock&Condition实现的管程支持多个条件变量,需要的朋友可以参考下
    2023-05-05

最新评论