根据具体业务参数值,获得相应实现类的方式:
1、工厂类实现ApplicationContextAware接口,并实现setApplicationContext方法,在该方法中通过
applicationContext.getBeansOfType()方法传入接口构造类作为参数获取所有具体实现类集合 Map<String, T>,通过遍历该集合获取到相应类。
2、工厂类中使用ApplicationContext 组件,通过该组件的applicationContext.getBean()方法传入具体实现类的构造类作为参数进行获取。
3、通过 SpringContextUtil.getBean()工具类传入具体实现类作为参数获取。
例子1:
/**
* @author
* @date 2019/4/9
*/
@Component
public class ProcessorFactory implements ApplicationContextAware,Serializable {
private static Map<Integer, ProcessorService> beanMap;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
beanMap = new TreeMap();
Map<String, ProcessorService> map = applicationContext.getBeansOfType(ProcessorService.class);
map.forEach((key, value) ->