1.抽象的父类
public abstract class FileAnalyseHandler<T> {
public abstract Integer doExecute(T param);
public Class<T> getTCls(){
Class<T> tClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
return tClass;
}
}
2.真正实现的service类
@Component("XX_base_handler")
public class MlBaseHandler extends FileAnalyseHandler<File> {
@Override
public Integer doExecute(File file){
//真正的实现逻辑
return 1;
}
}
3.对外提供的service类
@Service
public class FileAnalyse {
private static final Logger logger = LoggerFactory.getLogger(FileAnalyse.class);
public <T> Integer doFileAnalyse(String actionCode, File file) {
//name加_base_handler 就是实际功能类的@Component("XX_base_handler")
String name=actionCode;
FileAnalyseHandler handler = (FileAnalyseHandler) SpringUtils.getBean(name + "_base_handler");
if (handler == null) {
logger.error("未找到处理事件的handler:" + actionCode);
}
Class<T> t = handler.getTCls();
try {
if (t != null) {
return handler.doExecute(file);
}
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
}
真正调用的代码就是
@Resource
private FileAnalyse fileAnalyse;
Integer num=fileAnalyse.doFileAnalyse("XX",new File(filePath));
在这里参数和返回值是可以根据自己实际情况改变的