Spring中@Autowired自動注入map詳解
前言:
spring是支持基于接口實現(xiàn)類的直接注入的;
支持注入map,list等集合中,不用做其他的配置,直接注入;
為什么要用這種方式注入bean呢?
使用場景
適用于一個接口有多個實現(xiàn)類,然后根據不同的參數(shù)選擇執(zhí)行不同的實現(xiàn)類,
其實就是策略模式;
Spring 會在啟動時,自動查找實現(xiàn)了該接口的 bean,放到這個Map中去。 key為bean的名字,value為 實現(xiàn)了該接口的所有的 bean。
注意:這里只有在map的key為string類型時才有效;
@Autowired 標注作用于 Map 類型時,如果 Map 的 key 為 String 類型,則 Spring 會將容器中所有類型符合 Map 的 value 對應的類型的 Bean 增加進來,用 Bean 的 id 或 name 作為 Map 的 key。
代碼實現(xiàn)
首先定義一個的接口:
public interface KafkaStrategy {
public void handler(McRequest mcRequest);
}這個接口有多個實現(xiàn)類:
@Component("orderCancel")
@Slf4j
public class OrderCancelStrategy implements KafkaStrategy{
@Autowired
private BusinesService businesService;
@Override
public void handler(McRequest mcRequest) {
// 執(zhí)行具體的業(yè)務
businesService.orderCancel();
}
}
@Component("orderRoolback")
@Slf4j
public class OrderRoolbackStrategy implements KafkaStrategy{
@Autowired
private BusinesService businesService;
@Override
public void handler(McRequest mcRequest) {
// 執(zhí)行具體的業(yè)務
businesService.orderRoolback();
}
}
@Component("orderDelete")
@Slf4j
public class OrderDeleteStrategy implements KafkaStrategy{
@Autowired
private BusinesService businesService;
@Override
public void handler(McRequest mcRequest) {
// 執(zhí)行具體的業(yè)務
businesService.orderDelete();
}
}這里有三個實現(xiàn)類,都實現(xiàn)了KakfaStrategy接口;
將這三個實現(xiàn)類注入到sping容器中:
public class TestController{
// 這塊其實已經把KafkaStrategy接口的實現(xiàn)類注入到TestController了,可以調用了
@Autowired
private final Map<String, KafkaStrategy> strategyMap = Maps.newConcurrentMap();
// 這個構造方法的作用,其實不用也可以,為了防止重復注入,因此先清空,再注入
public TestController(Map<String, KcStrategy> strategyMap) {
this.strategyMap.clear();
strategyMap.forEach(this.strategyMap::put);
}
public void test(){
KafkaStrategy kafkaStrategy = strategyMap.get("orderDeleteStrategy");
// 這樣就獲取到了對應的實現(xiàn)類了,想獲取哪個都可以
}
}其實這種通過@Autowired注入map(接口有多個實現(xiàn)類),
這種方式多用于策略模式中。
除了可以注入到map中,也可以注入到list等其他集合中;
到此這篇關于Spring中@Autowired自動注入map詳解的文章就介紹到這了,更多相關@Autowired自動注入map內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java Swing GridBagLayout網格袋布局的實現(xiàn)
這篇文章主要介紹了Java Swing GridBagLayout網格袋布局的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12

