@ConfigurationProperties獲取值和@Value獲取值比較
阿新 • • 發佈:2018-11-01
(注意:會執行spring boot和理解spring各個檔案的意思的人才能知道下面的大概意思)
在這個專案中,我只寫了一個簡單的Person和Dog實體,沒有其他的東西,其他都是自動生成的資訊
在 application.properties(全域性配置檔案中)中,有一下屬性
person.lastName=張三 person.age=22 person.birth=2018/2/13 person.boss=false person.lists=a,b,b person.maps.k1=4 person.maps.k2=45 person.dog.name=dog person.dog.age=5
@ConfigurationProperties | @Value | |
功能 | 批量注入配置檔案中的屬性 | 一個一個注入 |
鬆散繫結(鬆散語法) | 支援 | 不支援 |
SpEL語法( #{ } ) | 不支援 | 支援 |
JSR303資料校驗 |
支援 | 不支援 |
複雜型別封裝 | 支援 | 不支援 |
1、功能:
在實體中注入
@ConfigurationProperties(prefix = "person")
或者一個一個的注入,如下
2、鬆散繫結(鬆散語法)
person.last-name與person.lastName是一個意思
屬性名匹配規則(Relaxed binding)
- – person.firstName:使用標準方式
- – person.first-name:大寫用–
- –person.first_name:大寫用_
- – PERSON_FIRST_NAME: 推薦系統屬性使用這種寫法
3、SpEL語法( #{ } )
執行後,會輸出age=22
4、JSR303資料校驗
加入下面的兩個語句,即校驗lastName是不是郵箱,執行的時候會報錯
執行結果報錯
複雜型別封裝
下圖的方式是會報錯的
總結:
1、如果說,我們只是在某個業務邏輯中需要獲取一下配置檔案中的某個項值,使用@Value
2、如果說,我們專門編寫了一個javaBean來和配置檔案進行對映,我們就直接使用@ConfigurationProperties
例子(總結1、):
註釋掉Person.class裡的
@ConfigurationProperties(prefix = "person")和所有的@Value
在bean索在的包下再建立一個controller包,建立一個類,執行。在瀏覽器開啟sayHello,就可以取出last-name的值
package com.java123.springboot.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Value("${person.last-name}")
private String name;
@RequestMapping("/sayHello")
public String sayHello(){
return "Hello"+name;
}
}
結果:
轉發與: https://blog.csdn.net/clmmei_123/article/details/81871836