手撕JAVA(二十八)@conditional

在《手撕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

啓動項目後

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章