翻译过来叫 "问题报告者",简单理解就是一个,异常的级别定义,这个 interface 没有在其他的场景使用,现在唯一发现的是,xml 解析的时候会使用到。
代码如下:
// ProblemReporterpublic interface ProblemReporter {/*** <1> 在分析过程中遇到致命错误时调用。* 实现必须将给定问题视为致命问题,即它们最终必须引发异常。*/void fatal(Problem problem);/*** <2> 在分析过程中遇到错误时调用。* 实现可以选择将错误视为致命错误。*/void error(Problem problem);/*** <3> 在分析过程中发出警告时调用。* 警告被认为是致命的。*/void warning(Problem problem);}
说明:
FailFastProblemReporter
快速失败报告,里面就是采用 logger
打印的 info
error
warning
级别的日志,error
级别异常,就不会打印日志,直接 BeanDefinitionParsingException
异常。
代码如下:
// FailFastProblemReporterpublic 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},详细说明发生的错误。*/@Overridepublic void fatal(Problem problem) {throw new BeanDefinitionParsingException(problem);}/*** 引发{@link BeanDefinitionParsingException},详细说明发生的错误。*/@Overridepublic void error(Problem problem) {throw new BeanDefinitionParsingException(problem);}/*** 将提供的{@link Problem}写入{@link Log}的{@code WARN}级别。*/@Overridepublic void warning(Problem problem) {logger.warn(problem, problem.getRootCause());}}
说明:
我们看一下,这些方法的实现,其实就是一个公共的定义,公共的类方法。
ps: 完结~