工厂接口:OrderRuteService
public interface OrderRuteService {void queryOrder(String orderNo);
}
工厂接口实现:OrderRuteServiceImpl
@Service
public class OrderRuteServiceImpl implements OrderRuteService, ApplicationContextAware, InitializingBean {private ApplicationContext context;private Map<String, OrderSpi> orderSpiMap = new HashMap<>();@Overridepublic void queryOrder(String type) {OrderSpi orderSpi = this.getOrderSpi(type);orderSpi.queryOrder();}//项目启动时,将所有继承了OrderSpi的类初始化,并放入本类的orderSpiMap中@Overridepublic void afterPropertiesSet() throws Exception {Map<String, OrderSpi> spis = this.context.getBeansOfType(OrderSpi.class);for (String s : spis.keySet()) {System.out.println("spiName=" + s);}for (OrderSpi spi : spis.values()) {orderSpiMap.put(StringUtils.lowerCase(spi.getName()), spi);}}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.context = applicationContext;}public <T extends OrderSpi> T getOrderSpi(String name) {return (T) this.orderSpiMap.get(name.toLowerCase());}
}
业务接口:OrderSpi
public interface OrderSpi {void queryOrder();String getName();
}
业务接口实现:xxxOrderSpi
@Component("xxxOrderSpi")
public class xxxOrderSpi implements OrderSpi {public static final String SPI_NAME = "xxx";@Overridepublic void queryOrder() {System.out.println("xxx进来了");}@Overridepublic String getName() {return SPI_NAME;}
}