绪论
在springboot项目中,为了方便,我们可能需要获取某一个接口下面的所有实现类,根据名称进行匹配使用。
正文
1、ServiceLocator.java
package com.yang.config;
import com.yang.workOrder.service.IRootService;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* explain:获取应用上下文并获取相应的接口实现类
*
* @author yang
* @date 2021/1/5
*/
@Component
public class ServiceLocator implements ApplicationContextAware {
/**
* 用于保存接口实现类名及对应的类
*/
private Map<String, IRootService> map;
/**
* 获取应用上下文并获取相应的接口实现类
* @param applicationContext
* @throws BeansException
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
//根据接口类型返回相应的所有bean
map = applicationContext.getBeansOfType(IRootService.class);
}
/**
* 获取所有实现集合
* @return
*/
public Map<String, IRootService> getMap() {
return map;
}
/**
* 获取对应服务
* @param key
* @return
*/
public IRootService getService(String key) {
return map.get(key);
}
}
2、IRootService.java
package com.yang.workOrder.service;
import com.alibaba.fastjson.JSONObject;
import com.yang.workOrder.entity.WorkOrder;
/**
* explain:基础流程操作服务接口
*
* @author yang
* @date 2021/1/5
*/
public interface IRootService {
/**
* 开始流程
* @param workOrder
* @return
*/
boolean startProcess(WorkOrder workOrder);
}
3、RootA001ServiceImpl.java
package com.yang.workOrder.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.yang.workOrder.entity.WorkOrder;
import com.yang.workOrder.service.IRootService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* explain:A_001流程审批实现类
*
* @author yang
* @date 2021/1/5
*/
@Service("A_001")
public class RootA001ServiceImpl implements IRootService {
private static final Logger LOGGER = LoggerFactory.getLogger(RootA001ServiceImpl.class);
@Override
public boolean startProcess(WorkOrder workOrder) {
return false;
}
}
4、RootA002ServiceImpl.java
package com.yang.workOrder.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.yang.workOrder.entity.WorkOrder;
import com.yang.workOrder.service.IRootService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* explain:A_002流程审批实现类
*
* @author yang
* @date 2021/1/5
*/
@Service("A_002")
public class RootA002ServiceImpl implements IRootService {
private static final Logger LOGGER = LoggerFactory.getLogger(RootA002ServiceImpl.class);
@Override
public boolean startProcess(WorkOrder workOrder) {
return false;
}
}
结果
(若有什么错误,请留言指正,3Q)