ApplicationContextAware使用理解

当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。

ApplicationContextAware使用理解_第1张图片

(2)ApplicationContextAware配合自定义注解扫描,把数据加载到一个公共map中:

@Component("crsDealMap")
public final class DealMap implements ApplicationContextAware {
    private static final Logger LOGGER = LoggerFactory.getLogger(DealMap.class);
    private static final Map DEAL_MAP = new HashMap<>(16);
    /**
     * 功能描述: 获取初始化信息
     * @return void
     * @author zhouyunjian
     * @date 2019/12/3 16:25
     */
    public static  Map  getDealMapInfo(){
        return DEAL_MAP;
    }

    /**
     * 功能描述: 项目启动时,加载规则处理相关流程
     *
     * @param act
     * @return void
     * @author zhouyunjian
     * @date 2019/12/3 16:25
     */
    @Override
    public void setApplicationContext(ApplicationContext act) {
        //加载风险规则处理流程
        loadRiskRuleType(act);
    }

    private void loadRiskRuleType(ApplicationContext act) {
        LOGGER.info("[STR]初始化加载风险规则处理流程");
        Map objectMap = act.getBeansWithAnnotation(RiskRuleType.class);
        for (Map.Entry entry : objectMap.entrySet()) {
            Object object = entry.getValue();
            RiskRuleType riskRuleType = object.getClass().getAnnotation(RiskRuleType.class);
            String name = riskRuleType.value();
            DealMap.DEAL_MAP.put(name, object);
            LOGGER.info("加载流程到map中name为[{}]服务为[{}]",name,object);
        }
        LOGGER.info("[END]初始化加载风险规则处理流程完成");
    }

}

ApplicationContextAware使用理解_第2张图片

ApplicationContextAware使用理解_第3张图片

ApplicationContextAware使用理解_第4张图片

ApplicationContextAware使用理解_第5张图片

你可能感兴趣的:(spring,spring,boot,spring,java)