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


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


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

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


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