前因:在研究springcloud config組件時,我發現config-server包下的EnvironmentController可以響應客戶端的請求,但EnvironmentController并不在啟動類所在的包路徑下,所以我推測它是作為某個@Bean方法在生效,尋找bean的依賴關系就是本章研究的主題
通常來講,讓bean加入spring的管理有3種方法
第一種是使用掃描組件@ComponentScan和@Component注解,也是開發中最常見的做法。springboot應用啟動時會掃描@ComponentScan的basePackages屬性指定的包路徑下的類文件,將路徑下用組件注解(@Component,@Controller,@Service)修飾的類加入spring容器
第二種是基于springboot自動配置原理在resources/META-INF目錄下添加spring.factories,在文件中寫入被@Configuration修飾的配置類的全限定名,配置類內被@Bean修飾的方法返回的bean對象將交由spring托管
第三種是使用@Import注解導入,類似于import寫入導入類的全限定名即可,在開發中使用較少
回到正題,IDEA可以通過注解旁的綠色小圖標查看bean的依賴關系,點擊圖標即可跳轉到供方或者需方,這個功能在分析源碼時還是很實用的
題外話:ConfigServerMvcConfiguration配置類中有EnvironmentController類型的bean方法,ConfigServerAutoConfiguration配置類通過@import方法引入ConfigServerMvcConfiguration,config-server包的spring.factories文件中記錄ConfigServerAutoConfiguration的全限定名,通過spring的自動化配置完成EnvironmentController的裝載