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分模块项目搭建的实现

    在软件开发中,利用Spring Boot进行分模块项目搭建能够提高代码的模块化和复用性,本文主要介绍了Springboot分模块项目搭建的实现,感兴趣的可以了解一下
    2024-10-10
  • 详解SpringBoot中时间类型的序列化与反序列化

    详解SpringBoot中时间类型的序列化与反序列化

    这篇文章主要为大家详细介绍了SpringBoot中时间类型的序列化与反序列化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-02-02
  • JRebel在线激活破解实现教程

    JRebel在线激活破解实现教程

    这篇文章主要介绍了JRebel在线激活破解实现教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • 23种设计模式(9) java桥接模式

    23种设计模式(9) java桥接模式

    这篇文章主要为大家详细介绍了java设计模式之桥接模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 详解使用Spring快速创建web应用的两种方式

    详解使用Spring快速创建web应用的两种方式

    这篇文章主要介绍了详解使用Spring快速创建web应用的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Springboot详解实现食品仓库管理系统流程

    Springboot详解实现食品仓库管理系统流程

    这是一个使用Springboot开发的食品仓库管理系统,是为商家提供商品货物进销存的信息化管理系统,具有一个仓库管理系统该有的所有功能,感兴趣的朋友快来看看吧
    2022-06-06
  • Spring中七种事务传播机制详解

    Spring中七种事务传播机制详解

    这篇文章主要介绍了Spring中七种事务传播机制详解,Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,Propagation枚举则引用了这些类型,开发过程中我们一般直接用Propagation枚举,需要的朋友可以参考下
    2024-01-01
  • Springboot集成Mybatis-plus、ClickHouse实现增加数据、查询数据功能

    Springboot集成Mybatis-plus、ClickHouse实现增加数据、查询数据功能

    本文给大家讲解Springboot + mybatis-plus 集成ClickHouse,实现增加数据、查询数据功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • idea粘贴空格时显示NBSP的问题及解决方案

    idea粘贴空格时显示NBSP的问题及解决方案

    在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决
    2025-12-12
  • 解决IDEA的Terminal中文乱码问题

    解决IDEA的Terminal中文乱码问题

    这篇文章主要介绍了解决IDEA的Terminal中文乱码问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07

最新评论