Spring中动态选择实现类

    xiaoxiao2022-07-02  95

    在spring中当一个接口有多个实现类的时候,通过创建简单工厂类,根据传入的不同的参数获取不同的接口实现类。

    public interface ExecuteService { ExecuteEnum getCode(); // 业务方法 void execute(); } @Service public class FirstExecuteServiceImpl implements ExecuteService { @Override public ExecuteEnum getCode() { return ExecuteEnum.FIRST; } public void execute() { System.out.println("11111111111"); } } @Service public class SecondExecuteServiceImpl implements ExecuteService { @Override public ExecuteEnum getCode() { return ExecuteEnum.SECOND; } public void execute() { System.out.println("222222222"); } } public enum ExecuteEnum { FIRST, SECOND,; }

    方案一

    @Component public class ExecuteServiceFactory implements ApplicationContextAware { private final static Map<ExecuteEnum, ExecuteService> EXECUTE_SERVICES = new HashMap<>(); @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { Map<String, ExecuteService> types = applicationContext.getBeansOfType(ExecuteService.class); types.values().forEach(e -> EXECUTE_SERVICES.putIfAbsent(e.getCode(), e)); } }

    方案二

    @Component public class ExecuteServiceFactory implements InitializingBean { @Autowired private List<ExecuteService> executeServices; public final static Map<ExecuteEnum, ExecuteService> EXECUTE_SERVICES = new HashMap<>(); @Override public void afterPropertiesSet() throws Exception { executeServices.forEach(l -> EXECUTE_SERVICES.putIfAbsent(l.getCode(), l)); } }
    最新回复(0)