上一篇我们分析到analyzers为止,发现analyzers中springboot自定义的有10种,这一节我们会依次分析这10种analyzers
分析之前我们先看一下FailureAnalyzers 的继承体系
接口只有一个方法 FailureAnalysis analyze
我们看抽象类AbstractFailureAnalysis的analyze
public FailureAnalysis analyze(Throwable failure) {
// 1. 获得failure中的异常堆栈中是type类型的异常
T cause = findCause(failure, getCauseType());
if (cause != null) {
// 2. 如果不等于null,则进行分析
return analyze(failure, cause);
}
// 3. 返回null
return null;
}
AbstractInjectionFailureAnalyzer
是一个和bean注入相关的基类,我们直接看他两个实现类
NoUniqueBeanDefinitionFailureAnalyzer
从名字也能看出这个类名字可以知道这是一个分析spring容器有有两个bean id一样的bean错误的分析器
NoSuchBeanDefinitionFailureAnalyzer 是一个分析一个很常见的NoSuchBeanDefinition的分析器。这个出现场景就是spring找不到类的定义。
BeanCurrentlyInCreationFailureAnalyzer这个分析器是对BeanCurrentlyInCreationException(循环依赖)进行分析,循环依赖的问题可以参考这篇文章
https://blog.csdn.net/caomiao2006/article/details/46511123
BeanNotOfRequiredTypeFailureAnalyzer是分析和动态代理相关的错误的分析器
ConnectorStartFailureAnalyzer是分析tomcat connectors启动时报错的分析器
PortInUseFailureAnalyzer 看名字也知道是分析端口被占用的错误分析器