当一个类实现了这个接口(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]初始化加载风险规则处理流程完成");
}
}