1. 抽象类AbstactExecutor
public abstract class AbstractExecutor {
public abstract String getExecutor();
public abstract String printContext();
}
2. 两个子类Executor1,Executor2
@Service
public class Executor1 extends AbstractExecutor {
@Override
public String getExecutor() {
return "Executor1";
}
@Override
public String printContext() {
return "Executor1----执行";
}
}
@Service
public class Executor2 extends AbstractExecutor {
@Override
public String getExecutor() {
return "Executor2";
}
@Override
public String printContext() {
return "Executor2----执行";
}
}
3. 配置一个工厂类,用于获取抽象类对象AbstractExecutorFactory
@Component
public class AbstractExecutorFactory {
private final List<AbstractExecutor> abstractExecutorList;
private static Map<String,AbstractExecutor> abstractExecutorMap;
@Autowired
public AbstractExecutorFactory(List<AbstractExecutor> abstractExecutorList) {
this.abstractExecutorList = abstractExecutorList;
}
@PostConstruct
public void init(){
abstractExecutorMap = abstractExecutorList.stream()
.collect(Collectors.toMap(AbstractExecutor::getExecutor, e -> e));
}
public AbstractExecutor getExecutor(String name){
return abstractExecutorMap.get(name);
}
}
4.测试类
@SpringBootTest(classes = Application.class)
@RunWith(SpringRunner.class)
public class TestGetExecutor {
@Autowired
private AbstractExecutorFactory executorFactory;
@Test
public void testGetExecutor(){
String name = "Executor1";
AbstractExecutor executor = executorFactory.getExecutor(name);
String s = executor.printContext();
System.out.println(s);
}
}