前言
1.Spring Boot注冊Bean多種方式撒蟀,常見的有:直接注冊(@SpringBootApplication)、自動配置(classpath:/META-INF/spring.factories)乏德、啟用組件(@Enable...)。
- 而直接注冊谐鼎、自動配置唯咬、啟用組件中注冊方式通常分為:掃描(@ComponentScan) 和 Java配置方式(@Bean)注冊。
- 使用Spring Boot時會通常我們會使用 @ConditionalOnBean 做判斷咬崔,依據(jù)某個Bean是否存在而決定是否注冊另一個Bean税稼,但由于Srping Boot Bean注冊順序的問題可能導致意外的情況發(fā)生。
- Bean注冊可簡單理解為存在優(yōu)先級梯隊垮斯,在同一梯隊或者向上梯隊使用@ConditionalOnBean來決定是否注冊Bean是可以的郎仆,但如果從上梯隊向下梯隊使用@ConditionalOnBean則會導致無法成功注冊,本文介紹Bean注冊順序兜蠕。
Bean注冊優(yōu)先級梯隊
第一梯隊如下:
1.1. 掃描的Bean扰肌,包括直接掃描、自動配置中掃描熊杨、啟用組件中掃描的Bean:
即掃描標注了 @Controller @Service @Repository @Component 的類
1.2. 直接的Java配置曙旭,即@SpringBootApplication直接覆蓋的包下用@Bean注冊的Bean
第二梯隊如下:
2.1. 啟用組件中的Java配置注冊的Bean墩剖,即在@Enable...引入、而且使用@Bean注冊的Bean
第三梯隊如下:
3.1. 自動配置中的Java配置注冊的Bean夷狰,即在自動配置中引入岭皂、而且使用@Bean注冊的Bean