动态获取抽象类的子类对象

 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);

    }
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值