Spring Boot筆記二:快速創建以及yml文件自動注入


 

  上個筆記寫了如何自己去創建Spring boot,以及如何去打jar包,其實,還是有些麻煩的,我們還自己新建了幾個文件夾不是。

  Idea可以讓我們快速的去創建Spring boot應用,來看

一、快速創建Spring boot

 

 

 沒啥講的了,點擊完成之后,我們需要等待幾分鍾,Idea會幫我們下載配置一些東西。

 

二、yml文件和自動注入

配置文件這個,我不打算細說,粗略的介紹一下,用的時候去百度就好了,目前已知的配置文件

1.xml

2.properties

3.yml

這三個里面,我最喜歡的是yml,最不喜歡的是xml

舉個例子,比如的的name是許嵩,age是32

yml的寫法是這樣的:(中間一定有個空格)

name: 許嵩
age: 32

而xml的寫法是這樣的。。。。。蒼天啊。。。。

<name>許嵩</name>
<age>32</age>

 

書歸正傳,我們開始寫了

首先,我們創建兩個類,一個Person,一個Dog

package com.vae.springboot.study.bean;


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    private String name;
    private Integer age;
    private Boolean boss;
    private Date  birth;
    private Map<String,Object> maps;
    private List<String> lists;
    private Dog dog;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }

    public Boolean getBoss() {
        return boss;
    }

    public void setBoss(Boolean boss) {
        this.boss = boss;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<String> getLists() {
        return lists;
    }

    public void setLists(List<String> lists) {
        this.lists = lists;
    }

    public Dog getDog() {
        return dog;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
package com.vae.springboot.study.bean;

public class Dog {
    private String name;
    private Integer age;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

這里有一個非常重要的一點,一定要寫ToString方法,我為了省事,沒寫這個,結果注入之后沒有顯示出來 一定要寫!

OK,現在來講一下

@Component   這個是加入到spring容器中
@ConfigurationProperties(prefix = "person") 這個是把類和我們的配置文件進行關聯,找的是person

 我們再新建一個yml文件,如圖:

 

 雖然上面有了一個properties,但是不管他,這倆是誰有誰起效,都有都一樣的話properties起效,貌似是

看看我的yml里面寫的啥

person:
    age: 32
    name: Vae
    birth: 1985/05/14
    boss: false
    maps: {k1: v1,k2: 12}
    lists:
     - 許嵩
     - 林俊傑
    dog:
      name: 格洛米
      age: 3

看看測試里面

 

 

 

 自動注入已經寫完了,我再次重復一下兩個特別重要的點

 

1.主程序是在study包下面,所有的類啊,Controller啊啥的,必須在study包下面,只有這樣,主程序才能對他們起效

 

 

2.類,必須寫Tostring方法................................

 

 

 

 

 

 三、題外話

 我上面采用的都是最方便的方式,這里把其它方式介紹一下,但是寫,還是上面的那樣寫

首先,配置文件的事,我沒講properties,這個寫中文的時候,會有亂碼,需要去Idea里面設置一下編碼格式為UTF-8

還有,我們的類和配置文件直接關聯,我用的是ConfigurationProperties的方式,其實還有一個@Value的方式,這個很難用,但是我還是介紹一下

 

  @Value("${person.name}")
    private String name;
    @Value("#{11*2}")
    private Integer age;
    @Value("false")
    private Boolean boss;

這里舉了三個例子,下面用一張圖對比一下@ConfigurationProperties和@Value的區別

 

1.功能:這個不說了吧,一個寫一次完事,一個@Value每一個字段都要加...

2.松散綁定:這個是什么意思呢?比如我的yml里面寫 last-name,這個和lastName是一樣的意思, - 后面跟着的字母默認是大寫的,也就是  last-name=lastName

這個就是松散綁定,@ConfigurationProperties認識這種方式,支持。@Value不認識他。。。

3.SpEL:這個是啥呢就是我們上面寫的數字計算的spring表達式語言 ,年齡age上的 @Value("#{11*2}")  這個是11*2=22歲,@Value可以計算這個,@ConfigurationProperties不支持,不能計算

4.JSR303數據校驗,這個就是我們在字段上寫一個@Email 表明這個字段必須符合郵箱的格式才行。這個@ConfigurationProperties是支持的,@Value不支持

5.復雜類型封裝:就比如我們yml里面的map,這個就算復雜類型了,@Value依然不支持....

 

好了,講到這里,已經清楚@Value實在是弱雞,但是弱雞有弱雞的用處,假如我們只需要從yml里面讀取一個值,那這個時候我們可以使用@Value,就一個,寫起來還行。

Java Bean類還是乖乖的使用@ConfigurationProperties吧,這個例子告訴我們,天生我材必有用......

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM