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}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值