ApplicationContextAware使用理解
当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。
(2)ApplicationContextAware配合自定义注解扫描,把数据加载到一个公共map中:
@Component("crsDealMap") public final class DealMap implements ApplicationContextAware { private static final Logger LOGGER = LoggerFactory.getLogger(DealMap.class); private static final Map<String, Object> DEAL_MAP = new HashMap<>(16); /** * 功能描述: 获取初始化信息 * @return void * @author zhouyunjian * @date 2019/12/3 16:25 */ public static Map<String, Object> 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<String, Object> objectMap = act.getBeansWithAnnotation(RiskRuleType.class); for (Map.Entry<String, Object> 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]初始化加载风险规则处理流程完成"); }
}