原文:
https://blog.csdn.net/weixin_41725090/article/details/81066252
举一个业务场景:
假设有一个统一买票旅游的入口,买完票会有一个字段表明种类。
这些种类表明你去哪,怎么去。
是坐飞机去奥地利,或是走路到隔壁龙虾店,都不得而知,而且代码逻辑几乎没有关联。这个时候我们难道要这样写代码吗?
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 {<span style="color:#bbb529;">@Autowired
private HandlerFactory handlerFactory;
@Test
public void factoryTest() {
handlerFactory.getHandlerByName(“aHandler”).print();
handlerFactory.getHandlerByName(“bHandler”).print();
}
}
于是控制台就打印相应bean下的方法啦~~~
</article>
举一个业务场景:
假设有一个统一买票旅游的入口,买完票会有一个字段表明种类。
这些种类表明你去哪,怎么去。
是坐飞机去奥地利,或是走路到隔壁龙虾店,都不得而知,而且代码逻辑几乎没有关联。这个时候我们难道要这样写代码吗?
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 {<span style="color:#bbb529;">@Autowired