巧妙運用spring依賴注入實現簡單工廠模式
阿新 • • 發佈:2019-01-08
舉一個業務場景:
假設有一個統一買票旅遊的入口,買完票會有一個欄位表明種類。
這些種類表明你去哪,怎麼去。
是坐飛機去奧地利,或是走路到隔壁龍蝦店,都不得而知,而且程式碼邏輯幾乎沒有關聯。這個時候我們難道要這樣寫程式碼嗎?
if(type == 1){
此處洋洋灑灑N多業務方法呼叫
}else(type == 2){
此處洋洋灑灑N多業務方法呼叫
}
我們可以用簡單工廠來做這事,而且spring的依賴注入非常智慧!
首先我們定義一個handler介面
public interface Handler { public void print(); }
然後我們實現2個,並且加上spring的註解,注意手動給它們取名字哦。
@Component("aHandler") public class AHandler implements Handler { @Override public void print() { System.out.println("我是AHandler"); } }
@Component("bHandler") public class BHandler implements Handler { @Override public void print() { System.out.println("我是BHanler"); } }
我們再寫一個工廠去生產它們。
@Component public class HandlerFactory { @Autowired private Map<String , Handler> handlerMap; public Handler getHandlerByName(String name){ return handlerMap.get(name); } }
好了,一切就緒,現在單元測試跑起來。
@RunWith(SpringRunner.class) @SpringBootTest(classes= DemoApplication.class) public class DemoApplicationTests { @Autowired private HandlerFactory handlerFactory; @Test public void factoryTest() { handlerFactory.getHandlerByName("aHandler").print(); handlerFactory.getHandlerByName("bHandler").print(); } }
於是控制檯就列印相應bean下的方法啦~~~