1. 程式人生 > >Spring Boot 2.0 的配置繫結類Bindable居然如此強大

Spring Boot 2.0 的配置繫結類Bindable居然如此強大

![](https://img2020.cnblogs.com/other/1739473/202101/1739473-20210113085341035-881353257.png) ## 1. 前言 在開發**Spring Boot**應用時會用到根據條件來向**Spring IoC**容器注入**Bean**。比如配置檔案存在了某個配置屬性才注入**Bean** : ![根據配置屬性來動態注入Bean](https://img2020.cnblogs.com/other/1739473/202101/1739473-20210113085341299-2138843946.png) 圖中紅色的部分是說,只有`ali.pay.v1.app-id`存在於**Spring**的環境配置中時這個`@Configuration`標記的類才能注入**Spring IoC**。 這裡面的`@ConditionalOnProperty`就是條件註解系列的一種。它還有很多種來滿足各種場景的條件註解: ![條件註解家族](https://img2020.cnblogs.com/other/1739473/202101/1739473-20210113085341508-299747095.png) > 其實數量遠不止截圖中這幾個,在Spring 家族的其它框架中也有實現。 這裡扯得有點遠了,今天不是來講這些條件控制註解的用法的,只是我發現了一個使用條件註解`@ConditionalOnProperty`無法解決的問題。 條件注入參考往期:[Spring Boot 2 實戰:使用 @Condition 註解來根據條件注入 Bean](https://mp.weixin.qq.com/s/7S1kvQOvDQF2--G7c1CGGg) ## 2. 配置檔案存在Map結構的場景 下面是一段配置檔案: ```yaml app: v1: foo: name: felord.cn description: 碼農小胖哥 bar: name: ooxx.cn description: xxxxxx ``` 對應配置類: ```java @Data @ConfigurationProperties("app") public class AppProperties { /** * */ pri