欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot松散綁定/寬松綁定(Relaxed Binding)的實現(xiàn)

 更新時間:2025年08月26日 10:20:22   作者:五月天的尾巴  
本文主要介紹了SpringBoot松散綁定/寬松綁定(Relaxed Binding)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、前言

在 Java 的配置文件中(如 .properties 和 .yml/.yaml),你看到駝峰命名(如 myProperty)和中劃線命名(如 my-property)同時有效,主要是因為 Spring Boot 的“寬松綁定”(Relaxed Binding)策略。

以mybatis的屬性配置為例

application.yml文件

# mybatis屬性配置
mybatis:
  configuration:
    map-underscore-to-camel-case: true  # 開啟下劃線轉(zhuǎn)駝峰的映射

application.properties文件

# mybatis屬性配置
mybatis.configuration.mapUnderscoreToCamelCase: true  # 開啟下劃線轉(zhuǎn)駝峰的映射

二、寬松綁定

2.1、何為寬松綁定

簡單來說,寬松綁定是 Spring Boot 提供的一種智能屬性綁定機制。它允許你在配置屬性(如 application.properties、application.yml、環(huán)境變量、命令行參數(shù))中使用多種不同格式的名稱,Spring Boot 都能自動將它們匹配到你的 @ConfigurationProperties 類或 Bean 的對應字段上。

Spring Boot 1.x 版本已初步支持寬松綁定,Spring Boot 2.x 版本進一步強化了寬松綁定的規(guī)范性和一致性。新項目建議直接采用 Spring Boot 2.x + @ConfigurationProperties 以保障兼容性。

  • @ConfigurationProperties 成為官方推薦方式 :明確僅通過此注解支持完整的寬松綁定規(guī)則(如前綴命名需符合 kebab-case 格式)。
  • @Value 的局限性被固化: 雖然部分簡單場景下 @Value 可能兼容寬松格式(如環(huán)境變量轉(zhuǎn)小寫匹配),但官方文檔始終強調(diào)其不支持正式寬松綁定,未來版本可能調(diào)整此行為。

2.2、寬松綁定的規(guī)則

Spring Boot 支持以下幾種屬性命名格式的自動轉(zhuǎn)換:

  • 駝峰命名法(myProperty)
  • 短橫線命名法(my-property)
  • 下劃線命名法(my_property)
  • 大寫下劃線命名法(MY_PROPERTY)

2.3、寬松綁定規(guī)則詳解

Spring Boot 在匹配時,會將配置源(文件、環(huán)境變量等)中的屬性名和 Java Bean 屬性名都進行規(guī)范化處理:

  • 將所有字符轉(zhuǎn)換為小寫。
  • 移除所有分隔符(-, _, 空格)。
  • 比較規(guī)范化后的結(jié)果。

示例:

Java Bean 屬性名有效的配置文件/YAML 屬性名示例規(guī)范化后結(jié)果 (小寫, 無分隔符)
userNameuserName (駝峰)username
user-name (中劃線 - 推薦)username
user_name (下劃線)username
USER_NAME (環(huán)境變量風格 - 大寫+下劃線)username
server.portserver.port (點分隔)server.port (點保留)
server-port (不推薦,但寬松綁定可能允許)serverport (可能出錯!)

重要提示: 對于帶 . 的層級屬性(如 server.port),使用中劃線替代點(server-port)通常不是好主意,也不推薦。 雖然寬松綁定在簡單情況下可能“碰巧”工作(規(guī)范化后 serverport 與 server.port 的規(guī)范化形式 server.port 不同),但它破壞了屬性的層次結(jié)構(gòu),可能導致意外的綁定結(jié)果或錯誤。點 . 是表示配置樹層次結(jié)構(gòu)的標準和推薦方式。

總結(jié):

松散綁定就是在進行匹配時,配置中的名稱要去掉中劃線和下劃線后,忽略大小寫的情況下去與java代碼中的屬性名進行忽略大小寫的等值匹配

2.4、優(yōu)先級規(guī)則

如果同一屬性以不同格式多次配置,Spring Boot 按以下優(yōu)先級綁定:

  1. 精確匹配(字段名與配置名完全一致)。
  2. 短橫線命名法。
  3. 下劃線命名法。
  4. 大寫下劃線命名法。

2.5、注意事項

在SpringBoot官方文檔中有幾個注意點:

  • 屬性必須要有getter、setter方法;
  • 如果屬性的類型是集合,要確保集合是不可變的;
  • 如果使用Lombok自動生成getter/setter方法,一定不要生成對應的任何構(gòu)造函數(shù),因為Spring IOC容器會自動使用它來實例化對象。
  • 使用JavaBean屬性綁定的方式只針對標準 Java Bean 屬性,不支持對靜態(tài)屬性的綁定。
  • 前綴匹配: @ConfigurationProperties 的 prefix 也支持寬松綁定。例如,prefix = “my-app” 可以匹配 myApp、my_app 等。
  • 嚴格模式: 可以通過 spring.boot.configurationprocessor.strict 啟用嚴格模式,禁用寬松綁定。

三、寬松綁定實例

3.1、@ConfigurationProperties注解與寬松綁定

application.yml

user:
  userName: 張三             #  駝峰命名
  user-age: 11              #  中劃線
  user_class: 三年級二班     #  下劃線
  USER_SEX: 男              #  大寫+下劃線

UserConfig.java

package com.demo.config;

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

@Component
@ConfigurationProperties(prefix = "user")
@Data
public class UserConfig {
    private String userName;
    private int userAge;
    private String userClass;
    private String userSex;
}

TestController.java

package com.demo.controller;

import com.demo.config.UserConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "test")
public class TestController {
    @Autowired
    UserConfig userConfig;
    @Value("${user.userage}")
    private String userage;

    @GetMapping("")
    public String test(){
        System.out.println(userConfig);
        return userConfig.toString();
    }
}

四、其他問題

4.1、Spring Boot Configuration Annotation Processor not configured

問題描述: 當我們使用@ConfigurationProperties注解進行屬性注入時,配置類上面可能會顯示Spring Boot Configuration Annotation Processor not configured

解決方法:

在pom.xml中引入一下依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

該依賴的作用,簡單來說就是為自定義的配置類生成元數(shù)據(jù)信息。然后報錯問題解決,文件能夠正常使用。

五、總結(jié)

注意:

  • ConfigurationProperties的prefix的值必須是短橫線隔開式,如demo.relaxed-binding
  • @ConfigurationProperties注解支持全量的屬性 寬松綁定方式;而@Value只推薦使用標準的kebab-case方式(僅使用小寫字母和-),例如:@Value(“{demo.item-price}”)可以提取demo.item-price和demo.itemPrice。
  • 松散綁定就是在進行匹配時,配置中的名稱要去掉中劃線和下劃線后,忽略大小寫的情況下去與java代碼中的屬性名進行忽略大小寫的等值匹配

到此這篇關于SpringBoot松散綁定/寬松綁定(Relaxed Binding)的實現(xiàn)的文章就介紹到這了,更多相關SpringBoot松散綁定/寬松綁定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java基本教程之java線程等待與java喚醒線程 java多線程教程

    java基本教程之java線程等待與java喚醒線程 java多線程教程

    這篇文章主要介紹了對線程等待/喚醒方法,文中使用了多個示例,大家參考使用吧
    2014-01-01
  • 詳解Java8合并兩個Map中元素的正確姿勢

    詳解Java8合并兩個Map中元素的正確姿勢

    這篇文章主要介紹了詳解Java8合并兩個Map中元素的正確姿勢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Spring BeanPostProcessor接口使用詳解

    Spring BeanPostProcessor接口使用詳解

    本篇文章主要介紹了Spring BeanPostProcessor接口使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java8新特性之重復注解與類型注解詳解

    Java8新特性之重復注解與類型注解詳解

    這篇文章主要使介紹了Java8新特性重復注解與類型注解,文章還介紹了JDK5中的注解與之對比,感興趣的朋友可以參考下面具體文章內(nèi)容
    2021-09-09
  • 面試JAVA時,問到spring該怎么回答

    面試JAVA時,問到spring該怎么回答

    這篇文章主要介紹了Spring面試資料,學Java的小伙伴都知道Spring是面試的必問環(huán)節(jié),看完了一天就可掌握數(shù)據(jù)結(jié)構(gòu)和算法的面試題,快來看看吧
    2021-08-08
  • MyBatis新增數(shù)據(jù)時自增id的兩種寫法小結(jié)

    MyBatis新增數(shù)據(jù)時自增id的兩種寫法小結(jié)

    本文介紹了在MyBatis中配置自增ID的兩種方法:一種是通過在Mapper文件中設置useGeneratedKeys和keyProperty,另一種是使用selectKey標簽,批量插入時,同樣采用useGeneratedKeys標簽,感興趣的可以了解一下
    2024-09-09
  • Java的異常體系以及File類構(gòu)造方法詳解

    Java的異常體系以及File類構(gòu)造方法詳解

    這篇文章主要為大家介紹了Java的異常體系以及File類構(gòu)造方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • javaweb實現(xiàn)文件上傳功能

    javaweb實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細介紹了javaweb實現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • SVN 安裝教程之服務器和客戶端

    SVN 安裝教程之服務器和客戶端

    這篇文章主要介紹了SVN 安裝教程之服務器和客戶端的相關資料,這里對安裝步驟進行了詳細介紹,需要的朋友可以參考下
    2016-11-11
  • SpringBoot解析指定Yaml配置文件的實現(xiàn)過程

    SpringBoot解析指定Yaml配置文件的實現(xiàn)過程

    這篇文章主要介紹了SpringBoot解析指定Yaml配置文件,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論