1.一般依賴注入:
@Autowired那就默認(rèn)代表當(dāng)前Bean一定是已經(jīng)存在的由境,如果為null英上,會(huì)報(bào)錯(cuò)
@Autowired(required=false) //required=false 的意思就是允許當(dāng)前的Bean對(duì)象為null。
2.問(wèn)題
但是多個(gè)類似對(duì)象的時(shí)候,選擇那個(gè)呢?
@ConditionalOnClass
是Springboot實(shí)現(xiàn)自動(dòng)配置的重要支撐之一身害。其用途是判斷當(dāng)前classpath下是否存在指定類,若是則將當(dāng)前的配置裝載入spring容器草戈。舉例來(lái)說(shuō)塌鸯,如果在maven中引入了velocity,那么視圖就使用velocity唐片,若引入的是freemarker丙猬,則使用freemarker.丢习,如果都引入了呢
3.也可以可以通過(guò)條件控制是否注入Bean
當(dāng)候選類都在的情況下,通過(guò)條件選擇淮悼,spring會(huì)挑其中之一
例如:Spring Boot關(guān)于Spring Data Redis的自動(dòng)配置類咐低。該自動(dòng)配置類檢測(cè)到包spring-data-redis被使用時(shí)才應(yīng)用
RedisAutoConfiguration自身主要的作用是確保以下bean存在于容器中 :
RedisTemplate redisTemplate – 基于容器中的redisConnectionFactory bean,// 僅在該 bean 不存在的情況下才定義
StringRedisTemplate stringRedisTemplate – 基于容器中的redisConnectionFactory bean袜腥,// 僅在該 bean 不存在的情況下才定義
@ConditionalOnBean
僅僅在當(dāng)前上下文中存在某個(gè)對(duì)象時(shí)见擦,才會(huì)實(shí)例化一個(gè)Bean
@ConditionalOnClass
某個(gè)class位于類路徑上,才會(huì)實(shí)例化一個(gè)Bean
@ConditionalOnExpression
當(dāng)表達(dá)式為true的時(shí)候羹令,才會(huì)實(shí)例化一個(gè)Bean
@ConditionalOnMissingBean
僅僅在當(dāng)前上下文中不存在某個(gè)對(duì)象時(shí)鲤屡,才會(huì)實(shí)例化一個(gè)Bean
@ConditionalOnMissingClass
某個(gè)class類路徑上不存在的時(shí)候,才會(huì)實(shí)例化一個(gè)Bean