组件-5.1-ProblemReporter

翻译过来叫 "问题报告者",简单理解就是一个,异常的级别定义,这个 interface 没有在其他的场景使用,现在唯一发现的是,xml 解析的时候会使用到。

代码如下:

// ProblemReporter
public interface ProblemReporter {
/**
* <1> 在分析过程中遇到致命错误时调用。
* 实现必须将给定问题视为致命问题,即它们最终必须引发异常。
*/
void fatal(Problem problem);
/**
* <2> 在分析过程中遇到错误时调用。
* 实现可以选择将错误视为致命错误。
*/
void error(Problem problem);
/**
* <3> 在分析过程中发出警告时调用。
* 警告被认为是致命的。
*/
void warning(Problem problem);
}

说明:

  • <1> 在分析过程中遇到致命错误时调用,实现必须将给定问题视为致命问题,即它们最终必须引发异常。
  • <2> 在分析过程中遇到错误时调用,实现可以选择将错误视为致命错误。
  • <3> 在分析过程中发出警告时调用,警告被认为是致命的。
FailFastProblemReporter 快速失败

FailFastProblemReporter 快速失败报告,里面就是采用 logger 打印的 info error warning 级别的日志,error 级别异常,就不会打印日志,直接 BeanDefinitionParsingException 异常。

代码如下:

// FailFastProblemReporter
public class FailFastProblemReporter implements ProblemReporter {
private Log logger = LogFactory.getLog(getClass());
/**
* 设置用于报告警告的{@link Log logger}。
* 如果设置为{@code null},则将使用设置为实例类名称的默认{@link Log logger}。
*/
public void setLogger(@Nullable Log logger) {
this.logger = (logger != null ? logger : LogFactory.getLog(getClass()));
}
/**
* 引发{@link BeanDefinitionParsingException},详细说明发生的错误。
*/
@Override
public void fatal(Problem problem) {
throw new BeanDefinitionParsingException(problem);
}
/**
* 引发{@link BeanDefinitionParsingException},详细说明发生的错误。
*/
@Override
public void error(Problem problem) {
throw new BeanDefinitionParsingException(problem);
}
/**
* 将提供的{@link Problem}写入{@link Log}的{@code WARN}级别。
*/
@Override
public void warning(Problem problem) {
logger.warn(problem, problem.getRootCause());
}
}

说明:

我们看一下,这些方法的实现,其实就是一个公共的定义,公共的类方法。

ps: 完结~