Spring boot 之 动态的获取不同的实现类

  1. 声明接口

// ApiResult 就是返回值,可以根据自己的需求,定义
/**

  • 根据不同的处理类型,来选择不同的处理方案
  • @author erjun
  • */
    public interface StorageType {
    ApiResult handleStorage();
    }

  1. 定义两个实现类

@Service("hdfsStorageType")
public class HdfsStorageType implements StorageType {

@Override
public ApiResult handleStorage() {
    System.out.println("-----hdfs---storageType-----");
    return null;
}

}

@Service("ftpStorageType")
public class FtpStorageType implements StorageType {

@Override
public ApiResult handleStorage() {

    System.out.println("-----ftp---storageType-----");

    return null;
}

}

  1. 定义一个Register类

将多个子类,注册到一个map容器里

@Service("register")
public class Register implements InitializingBean, ApplicationContextAware {
private Map<String, StorageType> serviceImpMap = new HashMap<String, StorageType>();

private ApplicationContext applicationContext;

// 获取Spring的上下文
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    this.applicationContext = applicationContext;
}

// 注册接口StorageType的所有实现的bean,
// 可以按照自己的规则放入 注册中心 serviceImpMap里
@Override
public void afterPropertiesSet() throws Exception {
    Map<String, StorageType> beanMap = applicationContext.getBeansOfType(StorageType.class);
    String name = null;
    for (StorageType storageType : beanMap.values()) {

        name = storageType.getClass().getSimpleName();

        System.out.println("---key:\t" + name);

        // 将类名,作为 key,
        serviceImpMap.put(name, storageType);
    }
}

public StorageType getStorageType(String name) {
    return serviceImpMap.get(name);
}

}

  1. controller层进行调用

Spring  boot 之 动态的获取不同的实现类

  1. POST 测试:

Spring  boot 之 动态的获取不同的实现类

Spring  boot 之 动态的获取不同的实现类

结果:

Spring  boot 之 动态的获取不同的实现类

转载于:https://blog.51cto.com/xingej/2045657

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值