Spring Boot 2.0 的配置繫結類Bindable居然如此強大
阿新 • • 發佈:2021-01-13
![](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