有時(shí)我們?yōu)榱耸钩绦蚋屿`活 需要多個(gè)類實(shí)現(xiàn)同一個(gè)接口,到注入時(shí)不希望通過指定屬性的名稱或者類型來進(jìn)行注入 如下圖:


兩個(gè)類同時(shí)實(shí)現(xiàn)了ISkill接口 在注入時(shí) 編譯會(huì)有錯(cuò)誤提示 無法定位具體的實(shí)現(xiàn)類


該問題可以通過自定義條件注解來解決 可以通過實(shí)現(xiàn)Condition接口并實(shí)現(xiàn)其中的方法 如圖 (具體返回值可根據(jù)自己具體業(yè)務(wù)決定)

通過配置類在注入時(shí)使用@Conditional(ConditionDiana.class)


標(biāo)紅是因?yàn)閕dea校驗(yàn)規(guī)則 不影響編譯運(yùn)行 具體原因不知....
此時(shí)在依賴注入時(shí)就可以將正確的類型注入到IOC容器中了
@Conditional 該注解提供給我們一個(gè)自己可以控制注入到IOC容器的bean的類型?
有人說可以通過@Autowired()和@Qualifier("")來解決 為什么要這么大費(fèi)周章 因?yàn)檫@兩個(gè)注解是通過IOC容器自動(dòng)幫我們實(shí)例化 實(shí)例化的過程我們沒辦法靈活的操控需要實(shí)例化的bean 雖然可以通過構(gòu)造方法和setter方法控制我們需要實(shí)例化的bean 但是當(dāng)我們需要靈活決定需要注入的類型時(shí)
@Configuration和@Bean以及@Conditional結(jié)合起來就更加靈活了