HashMap的使用,Service映射 | Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看活动链接

一 前言

  说到map,其实很多人都是很头疼的,因为相比于List,Map的可读性更低,因此,在开发中我以前还是比较多的使用List,但是其实Map还是有非常多的好处的,现在就介绍一种Map非常实用的处理方式

二 场景

  你付款时,有两种付款方式,支付宝和微信支付。针对这两种支付方式会有不同的逻辑处理,这时候你可能会对两种支付方式建立不同的两个类,然后更具传入的类型判断使用哪种支付方式。

boolean isZFB =true;
boolean isWX =true;
if(isZFB){
    //调用支付宝实现
}
if(isWX){
    //调用微信实现
}
复制代码

这样会有一个问题,随着支付方式的增多,if就会越来越多,最后很容易成为面条代码。这时候map可以解决这个问题。

三 应用

首先我们建立一个抽象的接口(这里面就使用正常的实战例子)

 public interface IEdiSender {}
 
复制代码

建立接口的实现类

 public class Csm001ShipEdiService implements IEdiSender{
    public static final String EDI_TYPE = "CSM001";
    @Override
    public String getEdiType() {
        return EDI_TYPE;
    }
}

public class Csm002ShipEdiService implements IEdiSender{
    public static final String EDI_TYPE = "CSM002";
    @Override
    public String getEdiType() {
        return EDI_TYPE;
    }
}
复制代码

然后在Spring初始化的时候将类型码与实现的实例进行一个映射

@Service
public class EdiSenderProvider implements ApplicationContextAware {

    private Map<String, IEdiSender> iEdiSenderMap;

    public IEdiSender getEdiSenderByType(String ediType) {
        return iEdiSenderMap.get(ediType);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Map<String, IEdiSender> beansOfType = applicationContext.getBeansOfType(IEdiSender.class);
        iEdiSenderMap = new HashMap<String, IEdiSender>();
        for (IEdiSender iEdiSender : beansOfType.values()) {
            iEdiSenderMap.put(iEdiSender.getEdiType(), iEdiSender);
        }

    }



}
复制代码

然后调用时直接通过类型获取实例就可以了,非常使用,其实这个和Beanfactory的Map是一样的效用。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享