?注冊條件
注入到容器內實體類型對象的屬性都是null,這些對象并沒有什么實際的意義,因為實體類的對象就是來封裝對象的,結果你這些對象中什么都沒有;
解決方法是
1.給這些屬性賦值然后再注入bean
但是這些屬性又是固定的不是很好,所以寫入到配置文件中
將配置文件中的內容進行注釋,發現直接報錯
但是想要的效果是在配置文件中沒有找到對應值,就不進行注入bean,有值的情況下才進行注入
SpringBoot提供了設置注冊生效調價的注解@conditional
以下是基于該注解的衍生注解
以下三個是常用的注解
@ConditionalOnProperty
這樣就沒有注入Country這個類
打開配置這樣就注入了
@ConditionalOnMissingBean
@ConditionalOnClass
目前我環境中的web依賴是注釋掉的
自動配置原理
為什么要學習自動配置原理
1.在實際開發中我們經常會定義一些公共的組件,然后提供給各個部門使用,為了使用方便我們會將公共的組件定義為starer,如果你想自定義starter,就必須先了解自定義配置原理
2.應對,面試
自動配置
遵循預定大約配置的原則,在boot程序啟動后,起步依賴中的一些bean對象會自動注入到ioc容器
之前我們注入bean并不是自動注入配置
源碼分析
舉例:程序引入spring-boot-starter-web起步依賴,啟動后,會自動向ioc容器中注入DispatcherServlet類
自動配置注解
總結
2.7之前的配置類是寫在spring.factories中的,2.7-3.0spring.factories和imports都可以,3.0以后只支持imports
如何實現自動配置
根據以上實現思路寫出以下2.0的腳本文件
引入
這個jar包可以完成自動配置
面試回答
自定義stater
場景
在實際開發中,經常會定義一些公共組件,提供給各個項目團隊使用。而在SpringBoot的項目中,一般會將這些公共組件封裝為SpringBoot的starter
創建自定義mybatis的starter
步驟
創建maven工程
工程1
工程2
原始mybatis的文件結構
添加依賴包
創建自動配置類
更換自己寫的dmybatis-spring-boot-starter依賴,運行