代码
public abstract class BaseHandler<T> {
@Transactional(rollbackFor = Exception.class)
public abstract void handle(String payload);
public abstract String type();
private Class<T> getClazz() {
ParameterizedType parameterizedType = (ParameterizedType)this.getClass().getGenericSuperclass();
Class<T> actualTypeArgument = (Class<T>) parameterizedType.getActualTypeArguments()[0];
return actualTypeArgument;
}
}
@Component
public class A extends BaseHandler<Object>{
@Override
protected void handle(String parser) {
}
@Override
public int type() {
return 1;
}
}
@Service
public class Test{
private Map<String, BaseHandler<Object>> handlerMap;
public void test(int type, String payload) {
BaseHandler<Object> handler = handlerMap.get(type);
if(handler == null){
}
handler.handle(payload);
}
@Autowired
public void init(List<BaseHandler<Object>> handlers) {
handlerMap = handlers.stream().collect(Collectors.toMap(BaseHandler::type, i->i));
}
}