MallInitializeContext.java 2.15 KB
package com.diligrp.cashier.mall.context;

import com.diligrp.cashier.mall.exception.MallException;
import com.diligrp.cashier.mall.service.paychannel.AbstractPayChannel;
import com.diligrp.cashier.mall.service.sourcechannel.AbstractChannel;
import com.diligrp.cashier.shared.util.SpringContextUtils;
import com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.Optional;

/**
 * @author dengwei
 * @version 1.0.0
 * @ClassName MallInitializeContext.java
 * @Description MallInitializeContext
 */
@Component
public class MallInitializeContext implements InitializingBean, DisposableBean {
    private static final Logger log = LoggerFactory.getLogger(MallInitializeContext.class);
    public static Map<String, AbstractChannel> SOURCE_CHANNEL_MAP = Maps.newConcurrentMap();
    public static Map<Integer, AbstractPayChannel> PAY_CHANNEL_MAP = Maps.newConcurrentMap();

    /**
     * 容器启动完成加载
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        SpringContextUtils.getBeanOfTpe(AbstractChannel.class).forEach((key, value) -> {
            SOURCE_CHANNEL_MAP.put(value.channel(), value);
        });

        SpringContextUtils.getBeanOfTpe(AbstractPayChannel.class).forEach((key, value) -> {
            PAY_CHANNEL_MAP.put(value.getPayChannel(), value);
        });
    }

    /**
     * 容器销毁加载
     */
    @Override
    public void destroy() throws Exception {
        log.info("spring container destroy");
    }

    /**
     * getByType
     */
    public static AbstractChannel getByChannel(String channel) {
        return Optional.ofNullable(SOURCE_CHANNEL_MAP.get(channel)).orElseThrow(() -> new MallException("不支持该渠道!"));
    }

    /**
     * getByPayChannel
     */
    public static AbstractPayChannel getByPayChannel(Integer payChannel) {
        return Optional.ofNullable(PAY_CHANNEL_MAP.get(payChannel)).orElseThrow(() -> new MallException("不支持该渠道!"));
    }
}