不太信任:ClassScaner.java 和 BeanTool.java 这两个类 ----------------------- ``` public interface AbstractOrderHandler { String handle(OrderDTO dto); String type(); } ``` ``` @Component public class LitbHandler implements AbstractHandler { @Override public String handle(OrderDTO dto) { return OrderType.litb.toString(); } @Override public String type() { return OrderType.litb.toString(); } } ``` ``` @Service public class OrderServiceImpl implements OrderService { @Resource public ApplicationContext applicationContext; @Override public String handle(OrderDTO dto) { String orderType = String.valueOf(dto.getType()); // Spring 有个 Map Cache 根据 class 来缓存 bean Name, 此处无需担忧性能 Map<String, AbstractOrderHandler> beans = applicationContext.getBeansOfType(AbstractOrderHandler.class); beans.values().stream() .filter(x -> x.type().equals(orderType)) .findFirst() .orElseThrow(() -> new RuntimeException("not found handler for type: " + orderType)) .handle(dto); return null; } } ``` 后来发现用 注解 有点脱了裤子放屁的感觉。 绕来绕去的,除了增加阅读复杂度
Activity