Spring Boot自動配置原理

Spring Boot自動配置非常靈活,就像我們買手抓餅一樣,套餐里的輔料是自動配置好的,但這或許不適合你的口味,你就只能自己配置手抓餅了嗎?當然不是,小吃店會讓你以菜單上已有的選項為基礎進行定制。下面以覆蓋Spring Security配置例子入手。

1.自動配置中使用的條件化注解表

image.png

2.自定義安全配置

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
       ...
}

3.開始揭開神秘面紗

覆蓋Spring Boot自動配置的安全配置時,最重要的一個類是SpringBootWebSecurityConfiguration。以下是其中的一個代碼片段:

@Configuration
@EnableConfigurationProperties
@ConditionalOnClass({ EnableWebSecurity.class })
@ConditionalOnMissingBean(WebSecurityConfiguration.class)
@ConditionalOnWebApplication
public class SpringBootWebSecurityConfiguration {
      ...
}

翻看源碼可知, SpringBootWebSecurityConfiguration上好幾個注解。看到@ConditionalOnClass注解后,我們知道Classpath里必須要有@EnableWebSecurity注解。
@ConditionalOnWebApplication 說 明 這 必 須 是 個 Web 應 用 程 序 。 @ConditionalOnMissingBean注解才是我們的安全配置類代替SpringBootWebSecurityConfiguration的關鍵所在。
@ConditionalOnMissingBean注解要求當下沒有WebSecurityConfiguration類型的Bean。雖然表面上我們并沒有這么一個Bean,但通過在SecurityConfig上添加@EnableWeb-Security注解,我們實際上間接創建了一個WebSecurityConfiguration Bean。所以在自動配置時,這個Bean就已經存在了, @ConditionalOnMissingBean條件不成立, SpringBootWebSecurityConfiguration提供的配置就被跳過了。所以我們成功顯示覆蓋了自動配置!!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容