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}

总结

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

相关文章

  • mybatis的foreach标签语法报错的解决

    mybatis的foreach标签语法报错的解决

    这篇文章主要介绍了mybatis的foreach标签语法报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Spring—@Value在static中引用方式

    Spring—@Value在static中引用方式

    这篇文章主要介绍了Spring—@Value在static中引用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 详解java枚举用法及实例

    详解java枚举用法及实例

    这篇文章主要介绍了Java枚举详解及使用实例,本文直接给出实例代码,需要的朋友可以参考下
    2017-04-04
  • @RequestBody获取不到参数的问题

    @RequestBody获取不到参数的问题

    这篇文章主要介绍了@RequestBody获取不到参数的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Spring Boot 项目做性能监控的操作流程

    Spring Boot 项目做性能监控的操作流程

    这篇文章主要介绍了Spring Boot 项目如何做性能监控,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Java数据结构常见几大排序梳理

    Java数据结构常见几大排序梳理

    Java常见的排序算法有:直接插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序等。本文详解介绍它们的实现以及图解,需要的可以参考一下
    2022-03-03
  • java连接orcale数据库示例分享

    java连接orcale数据库示例分享

    这篇文章主要介绍了java连接orcale数据库示例,需要的朋友可以参考下
    2014-02-02
  • 详解定时任务框架Quartz的使用

    详解定时任务框架Quartz的使用

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,本文就来带大家聊聊它的具体使用
    2023-02-02
  • Java老矣 尚能饭否?

    Java老矣 尚能饭否?

    Java老矣,尚能饭否?各类编程语言横空出世,纷战不休,然而 TIOBE 的语言排行榜上,Java 却露出了明显的颓势。这个老牌的语言,未来会是怎样?
    2017-06-06
  • 解决IDEA中Maven项目中JSTL标签无效问题

    解决IDEA中Maven项目中JSTL标签无效问题

    这篇文章主要介绍了关于IDEA中Maven项目中JSTL标签无效问题的解决方法,需要的朋友可以参考下
    2018-09-09

最新评论