在《手撕JAVA(八)》一文中已經討論過springboot的自動裝配原理,其實本質上就是由XXXConfiguration這些自動配置類來完成我們所需要的類的自動加載。但是springboot整合了整個J2EE,如果整個J2EE所需要的類全部加載,那麼肯定是內存撐爆,速度遲緩。所以springboot採用了@conditional註解來做判斷加載。只在滿足特定的情況下才加載特定的類。
以下是conditional系列註解對應的作用:
這裏以mybatis的自動配置類源碼來舉例:
整個類名前面一堆註解,其實就是對這個自動配置類做了判斷加
1.系統中必須有SqlsessionFactory.class,SqlSessionFactoryBean.class該配置類纔會加載
2.容器中必須有DataSource類
3.綁定MybatisProperties.class作爲配置文件類
4.在DataSourceAutoConfiguration.class加載後再加載
需要注意的是這裏的.class是類型標記
其實仔細思考會發現持久層框架的自動配置類都依賴於dataSource,
但是在dataSource的自動配置類裏面確實missingBean
就是這種設計給了我們自定義dataSource的機會,也就有了之前切換druid之類的操作機會。
如何查看加載了哪些東西?
在springboot配置文件裏
Debug=true
啓動項目後