package com.walker.async; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; public class AsyncBeanManager implements BeanPostProcessor { private final transient Logger logger = LoggerFactory.getLogger(getClass()); private static final Map, Consumer> consumerMap = new HashMap<>(4); private static final Map, Producer> producerMap = new HashMap<>(2); @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if(Consumer.class.isAssignableFrom(bean.getClass())){ consumerMap.put(bean.getClass(), (Consumer)bean); logger.info("........[AsyncMsg] find a Consumer: " + beanName); } else if(Producer.class.isAssignableFrom(bean.getClass())){ producerMap.put(bean.getClass(), (Producer)bean); logger.info("........[AsyncMsg] find a Producer: " + beanName); } return bean; } @Override public Object postProcessBeforeInitialization(Object bean, String arg1) throws BeansException { return bean; } public static final Map, Consumer> getConsumerMap(){ return consumerMap; } public static final Map, Producer> getProducerMap(){ return producerMap; } public static final Consumer getConsumer(Class clazz){ return consumerMap.get(clazz); } public static final Producer getProducer(Class clazz){ return producerMap.get(clazz); } }