一:SpringUtils工具类
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
if (SpringUtils.applicationContext == null) {
SpringUtils.applicationContext = context;
}
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
二:AbstractLoanTask类
import com.model.entity.LoanTaskDetail;
/**
* @author lizhangyu
* @version 1.0
* @date 2021/10/12 16:24
*/
public abstract class AbstractLoanTask {
public abstract void doTask(LoanTaskDetail loanTaskDetail) throws Exception;
}
找到对应的实现类
public void loanTaskExecute(LoanTaskDetail loanTaskDetail) {
try {
AbstractLoanTask abstractLoanTask = SpringUtils.getBean(
String.format("%s%s", loanTaskDetail.getType(), Constants.SUFFIX_LOAN_TASK),
AbstractLoanTask.class);
abstractLoanTask.doTask(loanTaskDetail);
} catch (Exception e){
log.error("放款任务异常,loanTaskDetail:{},error:", loanTaskDetail, e);
}
}
常量类:Constants
/**
* @author lizhangyu
* @version 1.0
* @date 2021/11/26 16:28
* @description 常量
*/
public class Constants {
/**
* task后缀名
*/
public static final String SUFFIX_LOAN_TASK = "-loan-task";
/**
* 文件名分隔符
*/
public static final String FILE_SPLIT = ".";
}
然后在对应实现类注入的时候,名字要和映射的保持一致就可以了
如:LoanApplyTask
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author lizhangyu
* @version 1.0
* @date 2021/11/26 16:05
* @description 放款申请
*/
@Service("apply_loan" + Constants.SUFFIX_LOAN_TASK)
@Slf4j
public class LoanApplyTask extends AbstractLoanTask {
@Override
public void doTask(LoanTaskDetail loanTaskDetail) throws Exception {
// todo
}
}