1. 程式人生 > >@ConfigurationProperties獲取值和@Value獲取值比較

@ConfigurationProperties獲取值和@Value獲取值比較

(注意:會執行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